gpt4 book ai didi

delphi - Firemonkey (FMX) 位图和颜色

转载 作者:行者123 更新时间:2023-12-03 14:32:58 28 4
gpt4 key购买 nike

假设我在 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

所以它是解释和“模糊”?我的行是因为颜色(由上面的 c 表示)不等于 claYellow ($FFFF00)。如果我画一条水平线或垂直线,效果是一样的。如果我将描边粗细更改为 2 并绘制一条非对角线,它会在 claYellow 中绘制,但会覆盖 2 个像素。

那么我如何确定我绘制的“真实”像素。在上面的示例中,我(可以)查找 $FFE7E700 但我如何知道查找该值(假设如果我用不同的颜色绘制线条,该值将会不同)。我试图查看我绘制的颜色和实际渲染的颜色之间是否存在一致的“差异”,但找不到。

谢谢

最佳答案

FMX 使用抗锯齿进行绘图。如果您想绘制没有模糊效果的线条,您应该使用特殊的像素对齐功能:

  • TCanvas.AlignToPixel
  • TCanvas.AlignToPixelVertically
  • TCanvas.AlignToPixelHorizo​​ntally

此函数自动计算像素位置以进行无模糊绘制。

谢谢

关于delphi - Firemonkey (FMX) 位图和颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10592874/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com