Bitmapa i kolory Firemonkey (FMX)

Załóżmy, że mam małą bitmapę w Firemonkey (powiedzmy 32x24 pikseli). Więc umieściłem TImage na formularzu, aw konstruktorze jest ten kod:

  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;

To rysuje ładną ukośną linię na blackground.

Chcę teraz przeanalizować mapę bitową, aby określić piksele, na które ma wpływ rysowanie linii. Jeśli wykonam podstawowy sprawdzanie piksel po pikselu za pomocą:

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

wyjście na moją notatkę to:

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

więc to interpretuje i „rozmazuje”? moja linia jako kolory (reprezentowane przez c powyżej) nie są równe claYellow ($ FFFF00). Jeśli narysuję linię poziomą lub pionową, efekt jest taki sam. Jeśli zmienię grubość obrysu na 2 i narysuję nie przekątną linię, rysuje ona w claYellow, ale obejmuje 2 piksele.

Jak więc mogę określić „prawdziwe” piksele, które narysowałem. W powyższym przykładzie chciałbym (mógłbym) poszukać $ FFE7E700, ale skąd mam wiedzieć, że szukam tej wartości (biorąc pod uwagę, że jeśli narysowałem linię w innym kolorze, ta wartość byłaby inna). Próbowałem sprawdzić, czy istnieje spójna „różnica” między kolorem, który narysowałem, a rzeczywistym kolorem renderowanym, ale nie mogłem go znaleźć.

Dzięki

questionAnswers(2)

yourAnswerToTheQuestion