Ich würde gerne die TParallel-Library einsetzen, um verschiedene Bitmap-Routinen schneller zu machen.
Ich habe hier versucht, das mal für eine 24-Bit-Bitmap zu implementieren (Funktion, welche abhängig von einem Wert eine Bitmap aufhellt bzw. abdunkelt):
Delphi-Quellcode:
procedure Helligkeit(Bitmap: TBitmap; Const Original : TBitmap; Value: integer; IgnoreWhite: Boolean);
var
x,y : integer;
Ziel : ^TRGBTriple;
Quelle : ^TRGBTriple;
n : byte;
ar : array[0..255] of byte;
RGBAQuelle, RGBAZiel: pRGBALine;
OK: Boolean;
begin
n := abs(value);
if value > 0 then
for x := 0 to 255 do if integer(x + n) > 255 then ar[x] := 255 else ar[x] := x + n
else
for x := 0 to 255 do if integer(x - n) < 0 then ar[x] := 0 else ar[x] := x - n;
for y := 0 to Bitmap.Height-1 do begin
Ziel := Bitmap.Scanline[y];
Quelle := Original.Scanline[y];
TParallel.For(0, Bitmap.Width-1, procedure (L: Integer) // <-- Hier neu eingebaut
begin
if IgnoreWhite then begin
OK := (Quelle^.rgbtBlue <> 255) or (Quelle^.rgbtGreen <> 255) or (Ziel^.rgbtGreen <> 255);
end else begin
OK := True;
end;
if OK then begin
Ziel^.rgbtBlue := ar[Quelle^.rgbtBlue];
Ziel^.rgbtred := ar[Quelle^.rgbtred];
Ziel^.rgbtGreen := ar[Quelle^.rgbtGreen];
end;
inc(Ziel);
inc(quelle);
end)
end;
end;
Leider kriege ich immer Zugriff-Exceptions (
Access violations), bzw. Bild ist verzerrt und Programm hängt sich auf.
Jemand eine Idee, wie man das richtig macht? Muss ich den Zugriff auf das Bitmap schützen, wenn ja, wie am besten?