Ich habe schon viele "vergrauungs" Funktionen probiert.
Das beste Ergebniss hatte ich mit dieser (kann man sicherlich auch mit Scanline machen)
| Zitat: |
var Grayshade, Red, Green, Blue: Byte;
PixelColor: Longint; |
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| with bitmap do for i := 0 to Width - 1 do for j := 0 to Height - 1 do begin PixelColor := ColorToRGB(Canvas.Pixels[i, j]); Red := PixelColor; Green := PixelColor shr 8; Blue := PixelColor shr 16; Grayshade := Round(0.3 * Red + 0.6 * Green + 0.1 * Blue); Canvas.Pixels[i, j] := RGB(Grayshade, Grayshade, Grayshade); end; |
Die verschiedenen Werte bei der Farbberechnung resultieren aus den verschiedenen Helligkeitswidergaben im S/W Bild