Предположим, у меня есть небольшое растровое изображение в Firemonkey (скажем, 32x24 пикселя). Поэтому я помещаю TImage в форму, а в конструкторе есть этот код:
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;
Это рисует красивую диагональную линию на черном фоне.
Что я хочу сделать, теперь проанализируйте растровое изображение, чтобы определить пиксели, затронутые штрихом. Если я сделаю базовую проверку пикселя по пикселям, используя:
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]]));
вывод в мою заметку:
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
чтобы он интерпретировал и "размывал"? моя линия как цвета (представленная выше) не равна claYellow ($ FFFF00). Если я рисую горизонтальную или вертикальную линию, эффект будет таким же. Если я изменяю толщину удара до 2 и рисую недиагональную линию, она рисует в claYellow, но она охватывает 2 пикселя.
Итак, как я могу определить "истинные" пиксели, которые я нарисовал. В приведенном выше примере я бы (мог) искать $FFE7E700, но как я знаю, чтобы искать это значение (учитывая, что если бы я рисовал линию другого цвета, это значение было бы иным). Я попытался понять, существует ли постоянная "разница" между цветом, на котором я рисовал, и фактическим цветом, но не смог найти его.
Спасибо