Firemonkey (FMX) Bitmap und Farben

Angenommen, ich habe eine kleine Bitmap in Firemonkey (sagen wir 32x24 Pixel). Also habe ich ein TImage in ein Formular eingefügt und im Konstruktor gibt es diesen Code:

  Image1.Bitmap.Create(32, 24);
  if Image1.Bitmap.Canvas.BeginScene then
  try
    Image1.Bitmap.Canvas.Fill.Color := claBlack;
    Image1.Bitmap.Canvas.Stroke.Color := claYellow;
    Image1.Bitmap.Canvas.FillRect(RectF(0,0,32,24), 0, 0, AllCorners, $FF);
    Image1.Bitmap.Canvas.DrawLine(PointF(1,1), PointF(10,10), $FF);
  finally
    Image1.Bitmap.Canvas.EndScene;
    Image1.Bitmap.BitmapChanged;
  end;

Dies zeichnet eine schöne diagonale Linie auf schwarzem Grund.

Ich möchte jetzt die Bitmap analysieren, um die Pixel zu bestimmen, die von der Linienzeichnung betroffen sind. Wenn ich eine grundlegende pixelweise Überprüfung durchführe, verwende ich:

  for y := 0 to 23 do
    for x := 0 to 31 do
      if Image1.Bitmap.Pixels[x,y] <> claBlack then
        memo1.Lines.Add(Format('x=%d. y=%d. c=%x', [x,y,Image1.Bitmap.Pixels[x,y]]));

Die Ausgabe auf meinem Memo ist:

x=0. y=0. c=FF3C3C00
x=1. y=0. c=FF3C3C00
x=0. y=1. c=FF3C3C00
x=1. y=1. c=FFE7E700
x=2. y=1. c=FF3C3C00
x=1. y=2. c=FF3C3C00
x=2. y=2. c=FFE7E700
x=3. y=2. c=FF3C3C00
x=2. y=3. c=FF3C3C00
x=3. y=3. c=FFE7E700
x=4. y=3. c=FF3C3C00
x=3. y=4. c=FF3C3C00
x=4. y=4. c=FFE7E700
x=5. y=4. c=FF3C3C00
x=4. y=5. c=FF3C3C00
x=5. y=5. c=FFE7E700
x=6. y=5. c=FF3C3C00
x=5. y=6. c=FF3C3C00
x=6. y=6. c=FFE7E700
x=7. y=6. c=FF3C3C00
x=6. y=7. c=FF3C3C00
x=7. y=7. c=FFE7E700
x=8. y=7. c=FF3C3C00
x=7. y=8. c=FF3C3C00
x=8. y=8. c=FFE7E700
x=9. y=8. c=FF3C3C00
x=8. y=9. c=FF3C3C00
x=9. y=9. c=FFE7E700
x=10. y=9. c=FF3C3C00
x=9. y=10. c=FF3C3C00
x=10. y=10. c=FF3C3C00

es ist also interpretieren und "verwischen"? Meine Linie als Farben (dargestellt durch c oben) ist nicht gleich claYellow ($ FFFF00). Wenn ich eine horizontale oder vertikale Linie zeichne, ist der Effekt der gleiche. Wenn ich die Strichstärke auf 2 ändere und eine nicht diagonale Linie zeichne, wird sie in Hellgelb gezeichnet, aber 2 Pixel werden abgedeckt.

Wie kann ich also die "wahren" Pixel bestimmen, auf die ich gezeichnet habe? Im obigen Beispiel würde (könnte) ich nach $ FFE7E700 suchen, aber wie kann ich nach diesem Wert suchen (vorausgesetzt, wenn ich die Linie in einer anderen Farbe zeichnen würde, wäre dieser Wert unterschiedlich). Ich habe versucht, festzustellen, ob es einen konsistenten "Unterschied" zwischen der Farbe, mit der ich gezeichnet habe, und der tatsächlich gerenderten Farbe gibt, konnte jedoch keine finden.

Vielen Dank

Antworten auf die Frage(2)

Ihre Antwort auf die Frage