我有一个自定义的 PropertyItem,我已经“创建”并在图像中存储了一些值。我很肯定它可以正确存储它,因为新图像的大小会增加(取决于我制作的字符串有多大)。
--[问题在底部]--
这是我将 PropertyItem 放入图像的代码。
Bitmap bmp = new Bitmap(image); //image is of type Image
string s = "Hello there";
var pi = createPropertyItem();
pi.Id = 40091;
pi.Len = s.Length+1; //don't worry too much about this - this is a test case,
//not the real types and lengths. If I put an error in here,
//it's not what's making it error out elsewhere. :)
pi.Type = 2;
pi.Value = s;
bmp.SetPropertyItem(pi);
bmp.Save("image.jpg", bmp.RawFormat);//is this actually saving the PropertyItems
//into the file, "image.jpg"?
无论如何,我在其他地方遇到了麻烦 - 我需要从图像的 PropertyItem 中提取值。然而:
Bitmap thing = new Bitmap("image.jpg"); // is this the problem code?
String newString = getStringOut(thing);
/////////////////further down in the program//////////////////////////
public String getStringOut(Image image)
{
var x = image.GetPropertyItem(40091); //this fails because the PropertyItem
//is not in this image.
string s = x.Value;
}
我的问题是:由于 PropertyItem 在保存的图像中(至少看起来是,因为文件的大小越大,我输入的字符串越长),为什么我的方法(getStringOut)不能访问它,当我回去尝试从保存的图像中检索 PropertyItem 时?当我初始化新的位图时,是不是因为某种原因没有拉取 EXIF 数据?