C# 如何向图像添加JPEG注释(COM)?

C# 如何向图像添加JPEG注释(COM)?,c#,.net,wpf,jpeg,wic,C#,.net,Wpf,Jpeg,Wic,我正在尝试使用WPF向图像文件添加JPEG注释。尝试以下代码会抛出一个ArgumentOutOfRangeException。设置其他属性不会出现问题 using (Stream read = File.OpenRead(@"my.jpeg")) { JpegBitmapDecoder decoder = new JpegBitmapDecoder(read, BitmapCreateOptions.None, BitmapCacheOption.None);

我正在尝试使用WPF向图像文件添加JPEG注释。尝试以下代码会抛出一个
ArgumentOutOfRangeException
。设置其他属性不会出现问题

    using (Stream read = File.OpenRead(@"my.jpeg"))
    {
        JpegBitmapDecoder decoder = new JpegBitmapDecoder(read, BitmapCreateOptions.None, BitmapCacheOption.None);

        var meta = decoder.Frames[0].Metadata.Clone() as BitmapMetadata;
        meta.SetQuery("/app1/ifd/exif:{uint=40092}", "xxx"); // works
        meta.SetQuery("/com/TextEntry", "xxx"); // does not work
    }
需要说明的是:我必须设置MSDN中列出的/com/TextEntry字段

数据由另一个仅支持此标记的应用程序读取,因此不能使用其他“注释”字段


有什么想法吗?

用于
/com/TextEntry
的数据类型有点棘手,它需要一个LPSTR。这是一个原始的8位编码字符串指针。可以通过为参数传递char[]来完成此操作。修正:

   meta.SetQuery("/com/TextEntry", "xxx".ToCharArray());

请注意,如果使用非ASCII字符,文本编码可能会出现问题,您将在机器的默认代码页(encoding.default)中获得文本编码。

我认为WPF不支持JPEG注释读写器。从方法DOC:<代码> Windows演示基础(WPF)支持以下图像元数据模式:可交换映像文件(ExIF)、文本(PNG文本数据)、图像文件目录(IFD)、国际新闻电信理事会(IPTC)和可扩展元数据平台(XMP)。.System.Text.Encoding.ASCII.GetBytes(“xxx”)怎么样?这将返回一个
字节[]
。不,它不会生成LPSTR.Genius!这就是诀窍!我搜索了很长一段时间,找到了关于如何设置这个标签的任何参考,甚至谷歌除了上面的MSDN页面之外,也没有任何对/com/TextEntry的参考。有趣的是,当使用GetQuery(“/com/TextEntry”)时,它将以字符串而不是char[]的形式返回数据。。。