In Bitmaps zeichnen
Nach oben zu Bild-Steuerelemente hinzufügen
Um in einem Bitmap zu zeichnen, verwenden Sie die Zeichenfläche des Bild-Steuerelements und verbinden die Behandlungsroutinen für Mausereignisse mit den entsprechenden Ereignissen des Bild-Steuerelements. Normalerweise werden Sie hierfür Bereichsoperationen verwenden (Füllungen, Rechtecke, Linienzüge usw.). Diese ermöglichen ein schnelles und effektives Zeichnen.
Zum Zugriff auf einzelne Pixel steht Ihnen die Bitmap-Eigenschaft Vcl.Graphics.TBitmap.ScanLine zur Verfügung. Im Normalfall setzen Sie das Pixel-Format des Bitmaps auf 24 Bit und behandeln den Zeiger, der von ScanLine zurückgegeben wird, als RGB-Array. Andernfalls müssen Sie das native Format der Eigenschaft ScanLine kennen. Das folgende Beispiel illustriert, wie mit der Eigenschaft ScanLine Pixel zeilenweise ermittelt werden können:
procedure TForm1.Button1Click(Sender: TObject); // Dieses Beispiel zeigt die direkte Ausgabe in ein Bitmap var x,y : integer; Bitmap : TBitmap; P : PByteArray; begin Bitmap := TBitmap.create; try Bitmap.LoadFromFile("C:\mygraphic.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(); // Dieses Beispiel zeigt die direkte Ausgabe in ein Bitmap Byte *ptr; try { pBitmap->LoadFromFile("C:\\mygraphic.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; }