Jas*_*son 35 delphi delphi-xe2 firemonkey
假设我在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;
Run Code Online (Sandbox Code Playgroud)
这在blackground上绘制了一条漂亮的对角线.
我想要做的是现在解析位图以确定受线条绘制影响的像素.如果我使用以下方法逐像素检查:
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]]));
Run Code Online (Sandbox Code Playgroud)
输出到我的备忘录是:
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
Run Code Online (Sandbox Code Playgroud)
所以这是解释和"模糊"?我的行作为颜色(由上面的c表示)不等于claYellow($ FFFF00).如果我绘制水平或垂直线,效果是相同的.如果我将笔触粗细更改为2并绘制非对角线,则会绘制为clayo,但它会覆盖2个像素.
那么如何确定我所绘制的"真实"像素.在上面的示例中,我会(可能)寻找$ FFE7E700,但我如何知道寻找该值(假设如果我用不同的颜色绘制线,那么该值将是不同的).我试图看看我绘制的颜色与实际渲染的颜色之间是否存在一致的"差异"但无法找到.
谢谢
FMX使用antialiazing进行绘图.如果你想绘制没有模糊效果的线条,你应该使用特殊的像素对齐功能:
此功能可自动计算绘图的像素位置而不会模糊.
谢谢
小智 1
示例中的颜色是抗锯齿的,这意味着它们一部分是您设置的颜色,一部分是背景颜色。精确的比例基于幕后进行的许多考虑。
不熟悉 FireMonkey(或 delphi),所以我不能告诉你是否有解决办法,但如果你想知道某种颜色落在哪里,你可以做的是测试 RGB 值之间的比率,假设你绘制黑色背景上只有一条线(否则,比率必须是一个范围才能捕获具有大量噪声的像素)
示例:黄色(#ffff00)
红/绿=1
红/蓝=绿/蓝=#inf(或者如果你愿意,255/1=255)
采样的像素可以是 #fcfc00 保持比率
带有噪声的采样像素可能是 #fcff09 有
红/绿=0.988
红/蓝=28
绿色/蓝色=28.33
红色和绿色仍然非常接近,并且都比蓝色高得多。