Pixelweise Bildbearbeitung

Aus DGL Wiki
Version vom 17. Juli 2007, 14:33 Uhr von The-Winner (Diskussion | Beiträge) (Die Seite wurde neu angelegt: == Zugriff durch Canvas.Pixels == Vorteile: * Sehr einfach anzuwenden * Funktioniert für alle Farbtiefen/Pixelformate * Geringes risiko falsche Bereiche zu überschrei...)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Zugriff durch Canvas.Pixels

Vorteile:

  • Sehr einfach anzuwenden
  • Funktioniert für alle Farbtiefen/Pixelformate
  • Geringes risiko falsche Bereiche zu überschreiben

Nachteile:

  • Sehr langsam

Beispiel:

procedure Invert(bmp:TBitmap);
var x,y:integer;
begin
 for y:=0 to bmp.height-1 do
  for x:=0 to bmp.width-1 do
   bmp.canvas.pixels[x,y]:=bmp.canvas.pixels[x,y]xor $FFFFFF;
end;

Zugriff mittels scanline

Vorteile:

  • Sehr schnell

Nachteile:

  • Bei komplexeren Manipulationen umständlich
  • Kein zugriff über x,y koordinate
  • Hohes Risiko falsche Bereiche zu überschreiben
  • Für 24BPP ungünstig, da es keinen 3byte großen primitiven typ gibt.

Beispiel:

procedure Invert(bmp:TBitmap);
Type TPixel=packed record B,G,R:byte;
var p:^TPixel;
    x,y:integer;
begin
 if bmp.pixelformat<>pf24bit then raise exception.create('Pixelformat not supported');
 for y:=0 to bmp.height-1 do
  begin
   p:=bmp.scanline[y];
   for x:=0 to bmp.width-1 do
    begin
     p.r:=p.r xor $FF;
     p.g:=p.g xor $FF;
     p.b:=p.b xor $FF;
     inc(p);//3 Byte weiter
    end;
  end;
end;