Ich tue mir schwer in Deinem Code etwas mir bekanntes zu entdecken ...
Vielleicht findest Du in meinen Beispielen etwas was Dir bei Dir bekannt vor kommt.
Delphi-Quellcode:
type
pRGBTripleArray = ^TRGBTripleArray;
TRGBTripleArray = ARRAY[0..$effffff] OF TRGBTriple;
pRGBQuadArray = ^TRGBQuadArray;
TRGBQuadArray = ARRAY[0..$effffff] OF TRGBQuad;
Procedure InvertBitMap24(bmp:TBitMap);
CONST
PixelCountMax = MaxInt / 3;
var
pscanLine : pRGBTripleArray;
x,y:Integer;
begin
for Y := 0 to bmp.Height -1 do
begin
pscanLine := bmp.Scanline[y];
for x := 0 to bmp.Width -1 do
begin
pscanLine[x].rgbtBlue := pscanLine[x].rgbtBlue XOR 255;
pscanLine[x].rgbtGreen := pscanLine[x].rgbtGreen XOR 255;
pscanLine[x].rgbtRed := pscanLine[x].rgbtRed XOR 255;
end;
end;
end;
Procedure InvertBitMap32(bmp:TBitMap);
CONST
PixelCountMax = MaxInt / 3;
var
pscanLine : pRGBQuadArray;
x,y:Integer;
begin
for Y := 0 to bmp.Height -1 do
begin
pscanLine := bmp.Scanline[y];
for x := 0 to bmp.Width -1 do
begin
pscanLine[x].rgbBlue := pscanLine[x].rgbBlue XOR 255;
pscanLine[x].rgbGreen := pscanLine[x].rgbGreen XOR 255;
pscanLine[x].rgbRed := pscanLine[x].rgbRed XOR 255;
end;
end;
end;
Procedure InvertBitMap(bmp:TBitMap);
begin
if bmp.PixelFormat=pf32Bit then InvertBitMap32(bmp)
else if bmp.PixelFormat=pf24Bit then InvertBitMap24(bmp);
end;