2

我有一个自定义的 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 数据?

4

2 回答 2

0

您是否尝试过这种方法- 本质上是在设置属性项之前复制属性项并更改其 ID?

另外,您可能想看看这个问题。作者没有尝试(或没有将自己描述为尝试)检索他的属性项,但他使用了一些与您不同的技术和 PropertyItem 属性值(在他的回答中)。

于 2012-12-21T21:11:23.913 回答
0

请参阅此处的链接。原来我的带有注释的代码行:// is this the problem code? 问题代码,因为这是删除元数据。

于 2013-01-02T14:36:37.770 回答