C++Builder相談室

このエントリーをはてなブックマークに追加
524デフォルトの名無しさん
>>514
 現時点でメモリ上にビットマップデータを作るコードがあるのなら

  Graphic::TBitmap* Bitmap = new Graphic::TBitmap;
  Bitmap->PixelFormat = pf24bit; // 任意
  Bitmap->Width = 640; // 任意
  Bitmap->Height = 480; // 任意

のように準備した Bitmap の画素へのポインタ(ScanLine[] プロパティを
使う)を取得し,そこへ直接書き込むようにしてみては?

 あとは
  Image1->Picture->Bitmap->Canvas->Draw( 0, 0, Bitmap ); なり,
  Form1->Canvas->Draw( 0, 0, Bitmap ); なりすれば
画面に反映出来るとおもう.

 他の方法として SetDIBitsToDevice() 等を使ってメモリ上の
データから DC 経由で読み込む手があるが・・・わざわざこの方法を
選ぶ理由もないような.

 LoadFromStream() といえばこないだ作ったプログラムでは圧縮連結
された画像を扱う必要があったので

  class TLzhArchive : public TMemoryStream
  {
  public:
    // 指定された名前の画像を自分自身に展開するメソッド.
    void __fastcall Lock( AnsiString asIndex );
    // 画像がいらなくなったら解放するメソッド.
    void __fastcall Unlock( void );
    // 構築子,扱う圧縮連結画像のファイル名を指定する.
    TLzhArchive( AnsiString asFilename );
  };

のようなクラスを作って

  TLzhArchive* Archive = new TLzhArchive( "c:\\背景集.lzh" );
  Graphic::TBitmap* Bitmap = new Graphic::TBitamp;
  Archive->Lock( "海岸.bmp" );
  Bitmap->LoadFromStream( Archive );
  Archive->Unlock();

 みたいな処理書いたな.