2

要約:

  1. 3289 X 4570 X 32bpp の .BMP 画像は約 53MB 必要です。同じサイズで24bppの写真は約43MB、16bppの写真は約28MBかかります。私の状況では、ChemDraw で処理された画像ファイルを 24bpp から 16bpp に変換する必要があります。

  2. 両方のファイルの 16 進データをさらに比較すると、ChemDraw で処理された画像と元の画像の違いをより詳細に理解できます。具体的には、ChemDraw は「EMF_STRETCHBLT」ではなく「EMF_STRETCHDIBITS」を保存します。「EMF_STRETCHDIBITS」は、ピクセルを TMetaFile/TMetaFileCanvas にコピーするときに StretchDIBits を呼び出すことによって実行できることを追加する必要があります。また、「EMF_STRETCHDIBITS」のピクセルは「EMF_STRETCHBLT」のピクセルと同じでなければならないことに注意してください。

  3. 残念ながら、ChemDraw が貼り付けた画像を正確に処理して保存する方法については、これまでわかりませんでした。つまり、ChemDraw に格納されたピクセルが、プログラムで取得できるピクセルと異なる理由がわかりませんでした。

    PS: 現時点では十分な評判が得られないため、後でこの質問に関する親切な回答を投票します。親切にコメントしてくれたみんなありがとう!

===</p>

やあ、

ありがとうございました!

「sample_original.bmp」という名前の写真があるとします。ファイルサイズは3289×4570、43MB。次に、次のようにして .EMF ファイル (Enhanced Windows MetaFile) に変換します。

方法 1、社内で小さな Delphi プログラムを作成する方法: (1) .BMP イメージ ファイルをロードします。(2) TMetaFile(TMetaFileCanvas) の Canvas を取得します。 (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 で解凍して、画像ファイル "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

4

2 に答える 2

1

2つの画像を比較してみませんか?それらをラスター編集プログラムで開き、ピクセルを比較します。

なぜファイルの大きさを気にするのですか?確かに重要なのは、画像が正しいかどうかです。

于 2010-12-05T18:58:44.237 に答える
1

あなたが書いた:

XML 文字列を Base64 でデコードし、zlib で解凍して、画像ファイル「sample_original_bmp2emf_method2.emf」に保存します。

したがって、それは間違いなくemfファイルではなく、圧縮された形式です..または、XMLに変換する前に別の形式(ベクトルなど)に変換されました。この場合、結果の画像のデータは実際のビットマップよりも少なくなります。

一方、最初の方法では、プレーンな bmp ファイル (つまり、ビットマップ データをカプセル化するために使用される emf レコード) よりも数バイトだけ大きいサイズの emf ファイルが得られます。

最初の方法の emf ファイルを圧縮すると、方法 2 で得られた偽の emf よりも小さいサイズのファイルが得られると確信しています。

于 2010-12-05T15:22:09.163 に答える