Hallo,
ich habe ein Problem mit dem Setzen von TBitmap.canvas.Pixels.
Zunaechst erstelle ich ein leeres Bitmap mittels:
Code:
bmp := TBitmap.Create;
bmp.Width := VWidth;
bmp.Height := VHeight;
bmp.PixelFormat := pf32Bit;
Anschliessend wird der Hintergrund auf eine hellblau Farbe gesetzt und diverse Objekte (Rechtecke und Text) auf bmp.canvas gezeichnet. Die Objekte selbst haben brush und pen entweder auf clwhite oder clBlue, also das bild ist im wesentlichen blau/weiss. Nun will ich die Farbwerte der Pixel aendern so dass das Bild heller oder dunkler wird. Das mache ich folgendermassen:
Code:
for Row := 0 to bmp.Height-1 do
for Col := 0 to bmp.Width-1 do
begin
Zahl := bmp.Canvas.Pixels[Col,Row];
blau := (Zahl shr 16) and $FF;
gruen:= (Zahl shr 8) and $FF;
rot := Zahl and $FF;
bmp.Canvas.Pixels[Col,Row] :=
RGB(rot-10, gruen-10, blau-10);
end;
Wenn ich mir die Originalwerte der Pixel ausgeben lasse dann stimmen die Werte. Nach dem Setzen der um 10 verringerten
RGB Werte sieht das Bitmap total vermurkst aus. Alles original mit clBlue gezeichnete wird nicht dunkler sondern weiss. Bei original blauer Schrift wird die Schrift im wesentlichen weiss aber am Rand der Schrift schimmern cyan und mangenta durch.
Woran kann das liegen?
Gutelo
PS: ich weiss, dass diese Implementation langsam ist verglichen mit Scanlines. Diverse Scanline Codeschnipsel aus dem Internet produzieren aber genau den gleichen Effekt.
Edit: der Mangenta/Cyan Effekt scheint vom Antialiasing zu kommen, ein Screenshot und zoom in Graphikprogramm zeigt bereits roetlich/gruene Pixel