综述:3289 X 4570 X 32bpp的的.bmp格式的图片需要约53MB:如何区分原始.BMP/.EMF图片文件与已处理的.BMP/.EMF文件之间的区别?
计算在直接的方式指出。大小相同但24bpp的图片大约需要43MB,而16bpp大约需要28MB。在我的情况下,ChemDraw处理过的图片文件必须从24bpp转换为16bpp。
进一步比较两个文件的十六进制数据可以更详细地了解ChemDraw处理后的图片与原始图片之间的区别。具体来说,ChemDraw存储“EMF_STRETCHDIBITS”而不是“EMF_STRETCHBLT”。应该补充说,当将像素复制到TMetaFile/TMetaFileCanvas时,可以通过调用StretchDIBits来完成“EMF_STRETCHDIBITS”。还应该注意的是,“EMF_STRETCHDIBITS”的像素应该与“EMF_STRETCHBLT”的像素相同。
不幸的是,直到现在我还没有发现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
你用Powerpoint打开哪些内容并将图片保存为`.emf`格式,然后查看您获得的尺寸。方法2中精心设计的方案似乎为该过程添加了许多不必要的步骤。此外,* ChemDraw *的实施细节可能是任何差异的根源。 – ja72 2010-12-05 13:27:05
非常感谢您的意见!正如你所说,ChemDraw是差异的根源。我担心的是是否有办法获得对差异的理解?我的意思是,图片是否降级,为什么图片的宽度和高度一直保持较小,等等。 – SOUser 2010-12-05 13:42:08
EMF是矢量图像格式。 BMP是一种光栅格式。为什么要将BMP转换为EMF,这似乎是一件奇怪的事情。 – 2010-12-05 15:20:24