Einzelnen Beitrag anzeigen

Gutelo

Registriert seit: 29. Sep 2013
152 Beiträge
 
#1

Problem mit Tbitmap.canvas

  Alt 27. Jan 2014, 14:10
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

Geändert von Gutelo (27. Jan 2014 um 14:15 Uhr)
  Mit Zitat antworten Zitat