如何区分原始.BMP / .EMF图片文件与处理过的.BMP / .EMF文件?

时间:2010-12-05 13:03:55

标签: image delphi bmp metafile .emf

综述:

  1. 计算直接指出:3289 X 4570 X 32bpp的.BMP图片大约需要53MB。相同大小但24bpp的图片大约需要43MB,而16bpp大小需要大约28MB。在我的情况下,ChemDraw处理的图片文件必须从24bpp转换为16bpp。

  2. 进一步比较两个文件的十六进制数据可以更详细地了解ChemDraw处理的图片与原始图片之间的区别。具体来说,ChemDraw存储“EMF_STRETCHDIBITS”而不是“EMF_STRETCHBLT”。应该补充一点,“EMF_STRETCHDIBITS”可以通过在将像素复制到TMetaFile / TMetaFileCanvas时调用StretchDIBits来完成。还应注意“EMF_STRETCHDIBITS”的像素应与“EMF_STRETCHBLT”的像素相同。

  3. 不幸的是,直到现在我还没有发现ChemDraw如何精确处理和存储粘贴的图片。也就是说,我没有找到为什么ChemDraw存储的像素与我可以编程获得的像素不同。

    PS:我稍后会对这个问题投反对票,因为我目前没有足够的声誉。感谢所有善意发表评论的人!

  4. ===

    您好,

    非常感谢你的时间!

    假设我有一张名为“sample_original.bmp”的照片。文件大小为3289 X 4570,43MB。然后我执行以下操作将其转换为.EMF文件(增强的Windows MetaFile):

    方法1,通过制作一个小型的内部Delphi程序: (1)加载.BMP图像文件。 (2)获取TMetaFile的画布(TMetaFileCanvas) (3)调用Canvas.Draw复制图像。 (4)保存到.EMF文件,名为“sample_original_bmp2emf_method1.emf”

    方法2: (1)在mspaint程序中打开.BMP图像文件,选择“全选”,然后选择“复制”。 (2)打开一个名为ChemDraw的外部程序,创建新文档,然后选择“粘贴”。 (3)然后我选择以XML兼容的.cdxml格式保存它,名为“sample_original_bmp2emf_method2.cdxml”。 (4)图片内容(可能更改或降级?)现在保存在sample_original_bmp2emf_method2.cdxml文件中。格式为Base64编码的zlib压缩格式。 (5)我可以对XML字符串进行Base64解码,zlib解压缩,然后将其保存到图片文件“sample_original_bmp2emf_method2.emf”中。

    sample_original_bmp2emf_method2.emf的文件大小比sample_original_bmp2emf_method1.emf小15 MB,但是宽度&高度一直保持。 此外,如果我在mspaint程序中打开“sample_original_bmp2emf_method2.emf”并将其保存回.bmp文件格式,则会弹出警告,表明透明信息正在丢失。

    你能帮忙评论一下如何区分“sample_original_bmp2emf_method1.emf”& “sample_original_bmp2emf_method2.emf”?图片是否因为质量下降而变小了? 换句话说,这个外部程序可能会对我的原始图片做出哪些改变?

    祝福,

    上面提到的文件可以在以下网址下载:

    http://www.rapidspread.com/file.jsp?id=2ighvzoci8

    PS:我相信Andreas Rejbrand非常友好地回答了我,然后我发表了我的评论。但我现在看不到那些。它应该是系统的正常行为吗? O_O

2 个答案:

答案 0 :(得分:1)

您写道:

  

Base64-解码XML字符串,对其进行解压缩,然后将其保存到图片文件“sample_original_bmp2emf_method2.emf”中。

所以它绝对不是emf文件,而是一些压缩格式.. 或者在转换为XML之前将其转换为另一种格式(如矢量)。在这种情况下,生成的图片中的数据少于真实的位图。

而第一种方法会给你一个emf文件,其大小只比普通的bmp文件大几个字节(即用于封装位图数据的emf记录)。

如果你压缩第一种方法的emf文件,我很确定你会得到一个比方法二获得的假emf小的文件。

答案 1 :(得分:1)

为什么不直接比较两张图片?在光栅编辑程序中打开它们并比较像素。

为什么要关心文件的大小?当然重要的是图像是否是正确的。