摘要:

  1. 计算以直接向前的方式指出:3289 x 4570 x 32BPP的.bmp图片大约需要53MB。相同大小但24BPP的图片大约需要43MB,而16BPP的图像大约需要28MB。然后,在我的情况下,必须将ChemDraw Procoress的图片文件从24BPP转换为16BPP。

  2. 对两个文件的十六进制数据的进一步比较,对ChemDraw Prococessed图片和原始图片之间的差异提供了更详细的了解。具体而言,ChemDraw存储“ EMF_StretchDibits”而不是“ EMF_Stretchblt”。应该补充的是,在将像素复制到tmetafile/tmetafilecanvas中时,可以通过调用strenthDibits来完成“ emf_stretchdibits”。还应注意,“ emf_stretchdibits”的像素应与“ emf_stretchblt”的像素相同。

  3. 不幸的是,到目前为止,我还没有发现ChemDraw的处理方式和存储粘贴图片的方式。也就是说,我没有发现ChemDraw存储的Pixels为什么与我可以在程序上获得的不同。

    PS:稍后我将对这个问题进行投票答案,因为目前我没有足够的声誉。感谢所有友好评论的人!

===

你好,

非常感谢您的时间!

说我有一张名为“ sample_original.bmp”的图片。文件大小为3289 x 4570,43MB。然后,我进行以下操作以将其转换为.emf文件(增强的Windows Metafile):

方法1,通过制作一个小型内部Delphi程序:(1)加载.bmp Image文件。 (2)获取tmetafile(tmetafilecanvas)的画布(3)呼叫帆布。绘制以复制图像。 (4)保存到.emf文件,名为“ sample_original_bmp2emf_method1.emf”

方法2:(1)在MSPAINT程序中打开.bmp Image文件,选择“选择全部”,然后选择“复制”。 (2)打开一个名为ChemDraw的外部程序,创建新文档,然后选择“粘贴”。 (3)然后,我选择将其保存在XML兼容的.cdxml格式中,名为“ sample_original_bmp2emf_method2.cdxml”。 (4)图片的内容(可能更改或退化?)现在保存在sample_original_bmp2emf_method2.cdxml文件中。该格式为基本64编码的Zlib压缩格式。 (5)我可以base64-decode xml字符串,zlib-depress,然后将其保存到图片文件“ 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”?图片是否较小,因为其质量降低了?换句话说,这个外部程序可能会对我的原始图片进行哪些更改?

最好的祝愿,

上面提到的文件可以在以下URL中下载:

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

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

有帮助吗?

解决方案

你写了:

base64将XML字符串删除,zlib-Decmpress,然后将其保存到图片文件“ sample_original_bmp2emf_method2.emf”中。

因此,它绝对不是EMF文件,而是某些拉链格式..或在转换为XML之前将其转换为另一种格式(如矢量)。在这种情况下,与真实的位图相比,您在结果图片中的数据少。

而第一种方法将为您提供一个EMF文件,其大小仅比普通的BMP文件大(即用于封装位图数据的EMF记录)。

如果您将第一个方法的EMF文件汇编,我敢肯定,您会得到一个大小的文件,该文件的大小比通过方法两个获得的false EMF较小。

其他提示

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

您为什么关心文件有多大?当然,重要的是图像是否合适。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top