2010-12-05 330 views
2

综述:3289 X 4570 X 32bpp的的.bmp格式的图片需要约53MB:如何区分原始.BMP/.EMF图片文件与已处理的.BMP/.EMF文件之间的区别?

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

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

  3. 不幸的是,直到现在我还没有发现ChemDraw如何准确处理和存储粘贴的图片。也就是说,我没有发现为什么ChemDraw存储的像素与我可以编程获得的像素不同。 PS:我稍后会就此问题投票赞成答案,因为我目前没有足够的声望。感谢所有热心评论的人!

===

嗨,

感谢您的时间非常多!

说我有一张名为“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)我可以Base64解码XML字符串,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:我认为,安德烈亚斯Rejbrand具有还跟了他的答案,然后我发表了我的评论。但我现在看不到那些人。它应该是系统的正常行为吗? O_O

+0

你用Powerpoint打开哪些内容并将图片保存为`.emf`格式,然后查看您获得的尺寸。方法2中精心设计的方案似乎为该过程添加了许多不必要的步骤。此外,* ChemDraw *的实施细节可能是任何差异的根源。 – ja72 2010-12-05 13:27:05

+0

非常感谢您的意见!正如你所说,ChemDraw是差异的根源。我担心的是是否有办法获得对差异的理解?我的意思是,图片是否降级,为什么图片的宽度和高度一直保持较小,等等。 – SOUser 2010-12-05 13:42:08

+0

EMF是矢量图像格式。 BMP是一种光栅格式。为什么要将BMP转换为EMF,这似乎是一件奇怪的事情。 – 2010-12-05 15:20:24

回答

1

您写道:

Base64编码解码XML字符串,zlib的,解压缩,然后将其保存到图片文件 “sample_original_bmp2emf_method2.emf”。

所以这是不明确的EMF文件,但一些压缩格式.. 或者它转换为XML之前被转换为另一种格式(如矢量)。在这种情况下,结果图片中的数据比真实的位图少。

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

如果你压缩第一个方法的emf文件,我相当肯定你会得到一个比方法二获得的虚假emf小的文件。

1

为什么你不只是比较两个图像?在光栅编辑程序中打开它们并比较像素。

你为什么在乎文件有多大?当然重要的是该图像是否是正确的。

相关问题