InPlaceBitmapMetadataWriter.TrySave() 返回 true 但不执行任何操作

2023-11-24

在 Windows 7 中的某些 .JPG 文件(EPS 预览,由 Adob​​e Illustrator 生成)上,InPlaceBitmapMetadataWriter.TrySave() 在调用一些 SetQuery() 后返回 true,但不执行任何操作。

代码示例:

BitmapDecoder decoder;
BitmapFrame frame;
BitmapMetadata metadata;
InPlaceBitmapMetadataWriter writer;
decoder = BitmapDecoder.Create(s, BitmapCreateOptions.PreservePixelFormat | BitmapCreateOptions.IgnoreColorProfile, BitmapCacheOption.Default);
frame = decoder.Frames[0];
metadata = frame.Metadata as BitmapMetadata;
writer = frame.CreateInPlaceBitmapMetadataWriter();
try {
    writer.SetQuery("System.Title", title);
    writer.SetQuery(@"/app1/ifd/{ushort=" + exiftagids[0] + "} ", (title + '\0').ToCharArray());
    writer.SetQuery(@"/app13/irb/8bimiptc/iptc/object name", title);
    return writer.TrySave();
}
catch {
    return false;
}

图片样本

您可以通过下载图像示例并使用此代码示例在此图像上设置标题来重现问题(如果您有 Windows 7)。 图像有足够的空间容纳元数据 - 并且此代码示例在我的 WinXP 上运行良好。 相同的代码在 Win7 上与其他 .JPG 文件一起工作正常。

欢迎任何想法:)


两件事情:

  1. 我认为你不能写信给你的metadata变量就像那样,因为它将被冻结。因此,您必须克隆它:

    
    
    BitmapMetadata metadata = frame.Metadata.Clone() as BitmapMetadata;
      
  2. 填充,你需要填充。我在花了大约一天的时间尝试使一些代码(与您的代码类似)工作后发现了这一点。InPlaceBitmapMetadataWriter如果图像文件中没有元数据填充,则该功能将不起作用。所以你需要类似的东西:

    
    
    JpegBitmapEncoder encoder = new JpegBitmapEncoder();
    if(frame != null && metadata != null) {
        metadata.SetQuery("/app1/ifd/PaddingSchema:Padding", padding);
        encoder.Frames.Add(BitmapFrame.Create(frame, frame.Thumbnail, metadata, frame.ColorContexts));
        using (Stream outputFile = File.Open(_myoutputpath, FileMode.Create, FileAccess.ReadWrite)) {
            encoder.Save(outputFile);
        }
    }
      

现在您可以使用位于_myoutputpath它为您添加了元数据填充InPlaceBitmapMetadataWriter运营。

本文和附加的代码应该可以帮助你。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

InPlaceBitmapMetadataWriter.TrySave() 返回 true 但不执行任何操作 的相关文章

随机推荐

  • 在 OSX 上静态链接 gfortran 库的正确方法

    我有一个要分发的 Fortran 程序 因此我想静态链接到 gfortran 库 如果我使用以下标志编译程序 gfortran o myprog static libgfortran static libgcc myprog f otool
  • 将向量分割成块,使得每个块的总和近似恒定

    我有一个包含超过 100 000 条记录的大型数据框 其中的值已排序 例如 考虑以下虚拟数据集 df lt data frame values c 1 1 2 2 3 4 5 6 6 7 我想创建 3 组上述值 仅按顺序 以便每组的总和或多
  • 使用 WebDAV 访问 Exchange 2003 收件箱

    你怎么 使用 NET 使用 WebDAV 获取用户收件箱 不是您自己的收件箱 中的电子邮件列表 然后获取每封电子邮件的属性和 或内容 我想这样做而不WebDAV NET 如果可能的话 看看我的这篇关于 webdav 的帖子 希望它能给你一些
  • 实体框架循环引用

    再次尝试这个问题 因为我的第一次尝试几乎没有连贯性 p 所以我非常困惑并使用 Entity Framework Code First 我有一个森林课 我有一个树类 每个森林可以有很多树 当我尝试序列化时 我得到了循环引用 public cl
  • 将数组传递给构造函数而不声明它?

    在处理中 我定义了以下类 class SomeClass SomeClass int someArray println someArray 现在我想创建该类的实例 但在将数组传递给构造函数时遇到问题 SomeClass myVar new
  • 每 5 分钟运行一次 PHP 脚本并避免竞争条件

    我有一个 php 脚本 需要每 5 分钟运行一次 目前我正在使用 cron 作业来运行它 并且效果很好 但我的主机只允许最短时间 15 分钟 所以我的问题是 我可以使用访问者每5分钟触发一次php脚本的运行吗 我可以轻松地记录它上次运行的时
  • Swift:带有中心圆形按钮的自定义 TabBar

    I try to create custom tabbar like the below picture Below is the result i get 下面是我当前的代码 class CustomTabBarController UI
  • 如何使用 objdump 反汇编单个函数?

    我的系统上安装了一个二进制文件 并且想查看给定函数的反汇编 最好使用objdump 但其他解决方案也是可以接受的 From 这个问题我了解到 如果我只知道边界地址 我也许能够反汇编部分代码 从这个答案我已经学会了如何将分割的调试符号转回单个
  • 如何在 iOS 中渲染拉伸文本?

    给定一个矩形区域 我想使用特定字体渲染一些文本并获取渲染的文本填写矩形 如下图所示 这与仅更改字体大小不同 将其渲染为位图然后缩放它不是一个选项 它看起来很糟糕 矢量图形就是做到这一点的方法 Solution 我想出了以下似乎对我的目的有用
  • 从 android 加密并在 CryptoJS 中解密

    我对 AES 加密和解密非常陌生 在我的应用程序中 我必须解密从服务器获得的数据 我收到的数据是使用 CryptoJS 库加密的 解密效果非常好 但是 在将数据发布到服务器时 我必须再次加密数据并将其发送到服务器 这没有提供适当的加密 我已
  • 如何在远程计算机上执行命令?

    我在服务器中有一个共享文件夹 我需要对某些文件远程执行命令 我怎么做 服务器上需要运行哪些服务才能正常工作 一些细节 只能使用 C 服务器上不能安装任何东西 另一种解决方案是使用WMI NET 或 Windows 管理规范 使用 NET F
  • Swift:标签文本-->“致命错误:在解包可选值时意外发现 nil”

    就像标题中所说的那样 我试图通过单击按钮来更改标签文本 错误出现在行self playerChoice text You Rock import UIKit class ViewController UIViewController var
  • 在 Mathematica 中读取 UTF-8 编码的文本文件

    我怎样才能读到utf 8编码Mathematica 中的文本文件 这就是我现在正在做的事情 text Import charData txt Text CharacterEncoding gt UTF8 但它告诉我 CharacterEnc
  • 使用setuptools,如何在安装时下载外部数据?

    我想创建一些非常易于使用的 pip 包 用于在 Python 中加载常见的机器学习数据集 是的 有些东西已经存在 但我希望它更简单 我想要实现的是 用户运行pip install dataset pip 下载数据集 例如通过wget htt
  • “Xcode”已损坏,无法打开。您应该将其移至垃圾箱

    已安装XCode 6 on Mavericks 它不运行 将操作系统更新为Yosemite 10 10 现在 Xcode app 通过 dmg 安装 启动失败并显示错误消息 Xcode is damaged and can t be ope
  • 使用 jQuery,如何动态设置选择框的大小属性?

    Using jQuery 如何动态设置选择框的大小属性 我想将其包含在这段代码中 mySelect bind click function myOtherSelect children remove var options for var
  • VS 2008 Professional、智能设备 .NET C# 项目 - 构建缓慢

    我有 VS 2008 Professional 和智能设备 NET C 项目 我总共有大约 100 个 cs 文件 构建需要很长时间 我必须等待链接器大约 每次编译项目需要 1 分钟 60 秒 我有 Core i3 4GB RAM 7200
  • 如何更改Kafka主题的副本数量?

    生产者或管理员创建 Kafka 主题后 如何更改该主题的副本数量 要增加给定主题的副本数量 您必须 1 在自定义重新分配 json 文件中指定额外副本 例如 您可以创建增加复制因子 json并将此内容放入其中 version 1 parti
  • 不安全的发布并发java [重复]

    这个问题在这里已经有答案了 Java并发实践书里已经给出了不安全发布的例子 public class Holder private int n public Holder int n this n n public void assertS
  • InPlaceBitmapMetadataWriter.TrySave() 返回 true 但不执行任何操作

    在 Windows 7 中的某些 JPG 文件 EPS 预览 由 Adob e Illustrator 生成 上 InPlaceBitmapMetadataWriter TrySave 在调用一些 SetQuery 后返回 true 但不执