ビットマップへの描画

提供: RAD Studio
移動先: 案内検索

グラフィックとマルチメディアの処理:インデックス への移動

ビットマップへの描画を行うには、イメージコントロールのキャンバスを使用し、そのイメージコントロールの適切なイベントにマウスイベントハンドラを接続します。一般には領域操作(塗りつぶし、長方形、多角線など)を使用します。領域操作は、高速で効率的な描画メソッドです。

個々のピクセルにアクセスする必要があるようなイメージを描画するには、ビットマップの ScanLine プロパティを使用すると効率的です。用途を汎用化するために、ビットマップピクセル形式を 24 ビットに設定し、ScanLine から返されたポインタを RGB の配列として扱うことができます。これ以外の設定では、ScanLine プロパティの本来の形式がわかっていないと処理できません。次の例は、一度に 1 行分のピクセルを取得するときの ScanLine の使い方を示しています。

procedure TForm1.Button1Click(Sender: TObject);
// これは、Bitmap への直接描画の例
var
  x,y : integer;
  Bitmap : TBitmap;
  P : PByteArray;
begin
  Bitmap := TBitmap.create;
  try
    Bitmap.LoadFromFile("C:\Program Files\Borland\Delphi 4\Images\Splash\256color\factory.bmp");
    for y := 0 to Bitmap.height -1 do
    begin
      P := Bitmap.ScanLine[y];
      for x := 0 to Bitmap.width -1 do
        P[x] := y;
    end;
    canvas.draw(0,0,Bitmap);
  finally
    Bitmap.free;
  end;
end;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Graphics::TBitmap *pBitmap = new Graphics::TBitmap();
  // これは、Bitmap への直接描画の例
  Byte *ptr;
  try
  {
    pBitmap->LoadFromFile("C:\\Program Files\\Borland\\CBuilder\\Images\\Splash\\256color\\factory.bmp ");
    for (int y = 0; y < pBitmap->Height; y++)
    {
      ptr = pBitmap->ScanLine[y];
      for (int x = 0; x < pBitmap->Width; x++)
        ptr[x] = (Byte)y;
    }
    Canvas->Draw(0,0,pBitmap);
  }
  catch (...)
  {
    ShowMessage("Could not load or alter bitmap");
  }
  delete pBitmap;
}

関連項目