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...)
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;