処理された.bmp/.emfファイルを使用した元の.bmp/.emf画像ファイルの違いを伝える方法は?
質問
要約:
計算では、次のように単純な方法で指摘しています。3289x 4570 x 32BPPの.BMP画像には約53MBかかります。同じサイズですが24BPPの写真には約43MBが必要で、16BPPの写真には約28MBが必要です。私の状況では、ChemDraw処理の画像ファイルを24bppから16bppに変換する必要があります。
両方のファイルのHEXデータをさらに比較すると、ChemDrawに加えられた画像と元の画像の違いをより詳細に理解しています。具体的には、ChemDrawは「emf_stretchblt」ではなく「emf_stretchdibits」を保存します。ピクセルをTmetafile/TmetafilecanvasにコピーするときにStretchDibitsを呼び出すことで「EMF_StretchDibits」を実行できることを付け加える必要があります。また、「emf_stretchdibits」のピクセルは「emf_stretchblt」のピクセルと同じでなければならないことにも注意する必要があります。
残念ながら、今まで、ChemDrawがどのように貼り付けられた写真を貼り付けているのかを知りませんでした。つまり、保存されたピクセルの化学ドローがプログラムで取得できるものとは異なる理由を知りませんでした。
PS:今のところ十分な評判がないので、この質問に関して親切な答えを投票します。コメントしてくれたすべての人に感謝します!
===
やあ、
お時間をいただきありがとうございます!
「sample_original.bmp」という名前の写真があると言ってください。ファイルサイズは3289 x 4570、43MBです。次に、次のことを行い、.emfファイル(Enhanced Windows Metafile)に変換します。
方法1、小さな社内Delphiプログラムを作成します。(1).bmp画像ファイルをロードします。 (2)TMETAFILE(TMETAFILECANVAS)のキャンバスを取得します(3)CANVAS.DRAWを呼び出して画像をコピーします。 (4)「sample_original_bmp2emf_method1.emf」という名前の.emfファイルに保存
方法2:(1)MSPAINTプログラムで.BMP画像ファイルを開き、「すべてを選択」を選択し、「コピー」を選択します。 (2)ChemDrawという外部プログラムを開き、新しいドキュメントを作成し、「貼り付け」を選択します。 (3)次に、「sample_original_bmp2emf_method2.cdxml」という名前のxml互換.cdxml形式でそれを保存することを選択します。 (4)画像の内容(変更または劣化する可能性がありますか?)は、Sample_original_bmp2emf_method2.cdxmlファイルに保存されます。このフォーマットは、base64エンコードされたZlib圧縮形式です。 (5)XML文字列をbase64-デコードし、Zlib-DeCompressそれを使用して、それを画像ファイル「sample_original_bmp2emf_method2.emf」に保存できます。
sample_original_bmp2emf_method2.emfのファイルサイズは、sample_original_bmp2emf_method1.emfよりも15 mbが小さくなっていますが、幅と高さは維持されています。さらに、mspaintプログラムで「sample_original_bmp2emf_method2.emf」を開いて.bmpファイル形式に戻すと、透明な情報が失われているという警告が表示されます。
違いを伝える方法についてコメントするのを手伝っていただけますか?その品質が低下するため、画像は小さくなっていますか?言い換えれば、この外部プログラムによって私の元の写真にどのような変更を加えることができますか?
幸運をお祈りしています、
上記のファイルは、次のURLでダウンロードできます。
http://www.rapidspread.com/file.jsp?id=2ighvzoci8
PS:Andreas Rejbrandは彼の答えを作るのに十分親切であると信じています。しかし、私は今それらを見ることができません。それはシステムの通常の動作であるはずですか? O_O
解決
あなたが書いた:
base64-decode xml文字列、zlib-decompress itを描画し、写真ファイル「sample_original_bmp2emf_method2.emf」に保存します。
したがって、それは明確にEMFファイルではなく、いくつかのジップ形式です。または、XMLに変換する前に別の形式(Vectorialなど)に変換されました。この場合、実際のビットマップよりも、結果の画像のデータが少なくなります。
一方、最初の方法では、プレーンBMPファイル(つまり、ビットマップデータのカプセル化に使用されるEMFレコード)よりも大きいサイズのサイズのEMFファイルが提供されます。
最初のメソッドのEMFファイルをzipすると、方法2で取得した誤ったEMFよりも小さいサイズのファイルを取得すると確信しています。
他のヒント
2つの画像を比較してみませんか?ラスター編集プログラムでそれらを開き、ピクセルを比較します。
ファイルの大きさを気にするのはなぜですか?確かに重要なのは、画像が正しいものであるかどうかです。