2010-12-05 33 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

爲什麼你不只是比較兩個圖像?在光柵編輯程序中打開它們並比較像素。

你爲什麼在乎文件有多大?當然重要的是該圖像是否是正確的。