fractal.tfract - TFEngine & T-Fract 開発室

フラクタルエンジンライブラリ TFEngine フラクタルジェネレータ T-Fract

#2: TImage の画像を保存する
Date: 2001/02/16 07:31:19 Fri Author: tos (tnet0004)

フラクタル画像はフォームに貼り付けたTImageに描画しています。それを
画像ファイルとして保存する処理を付けたところで問題が発生しました。
保存した画像ファイルが不正なファイルとされてしまうのです。


画像を保存するには、VCLリファレンスに以下のように書かれています。

        Image1->Picture->SaveToFile(filename);

ところが、これで保存した画像ファイル(BMP)を susie や PhotoshopLE
で開こうとすると、不正なファイルだとしてはねつけられてしまいます。
一方、IE やペイントブラシだと読み込めて表示もできます。
昔は確かにこの方法で保存できたはずです。


調査した結果、どうも 32bit形式で BMPファイルが作成されている
ようです。もちろん、32bit形式の BMPフォーマットなどありません。

TImage は、実行時の画面モードを検出しているようで、今のビデオカード
だと True Color(32bit) が TImage に反映されているようです。
昔使っていたビデオカードでは、Full Color(24bit)だったので、
そのまま画像を保存しても 24bit形式の BMPファイルが作成でき、
偶然うまく行っていたみたいです。


と言うわけで、以下のように TBitmap にコピーした後にフォーマットを、
24bitにし、それを保存することで解決することができました。

       Graphics::TBitmap       *bitmap = new Graphics::TBitmap;
       bitmap->Assign(Image1->Picture);
       bitmap->PixelFormat = pf24bit;
       bitmap->SaveToFile (SavePictureDialog1->FileName);
       delete bitmap;

本来、このようにしないと任意の形式で BMPファイルを保存できない
わけですね。 実行環境非依存なアプリケーションを作るには、気を付け
ないといけないです。

// しかし、IE や ペイントブラシは、非公開のフォーマットまで
// サポートしているとは...。


tos.

■ この記事のコメントを書く

■ この書き込みを削除/復活します(投稿者のみ可)
■ この書き込み近辺の一覧表示へ

【最新20記事 [一覧] [ツリー] [一括] 】 【最新の記事は 15 番です.】
番から 番までの記事を
TFEngine & T-Fract 開発室 に新しい記事を

T-Net ■ メインページ