Bitmap e cores do Firemonkey (FMX)

Suponha que eu tenha um pequeno bitmap no Firemonkey (digamos 32x24 pixels). Então eu coloquei um TImage em um formulário e no construtor existe esse código:

  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;

Isso desenha uma linha diagonal agradável no blackground.

O que eu quero fazer agora é analisar o bitmap para determinar os pixels afetados pelo desenho de linha. Se eu fizer uma verificação básica de pixel por pixel, use:

  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]]));

a saída no meu Memo é:

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

então está interpretando e "borrando"? minha linha como as cores (representadas por c acima) não são iguais a claYellow ($ FFFF00). Se eu desenhar uma linha horizontal ou vertical, o efeito é o mesmo. Se eu alterar a espessura do meu traço para 2 e desenhar uma linha não diagonal, ele desenha em claYellow, mas ele cobre 2 pixels.

Então, como posso determinar os pixels "verdadeiros" que desenhei. No exemplo acima eu poderia (poderia) procurar por $ FFE7E700, mas como eu sei procurar por esse valor (dado que se eu desenhasse a linha em uma cor diferente, esse valor seria diferente). Eu tentei ver se há uma "diferença" consistente entre a cor que eu desenhei e a cor real renderizada, mas não consegui localizar uma.

obrigado

questionAnswers(2)

yourAnswerToTheQuestion