加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – Firemonkey(FMX)位图和颜色

发布时间:2020-12-15 05:23:51 所属栏目:大数据 来源:网络整理
导读:假设我在Firemonkey有一个小的位图(例如32×24像素)。所以我把一个TImage到一个窗体,在构造函数中有这样的代码: Image1.Bitmap.Create(32,24); if Image1.Bitmap.Canvas.BeginScene then try Image1.Bitmap.Canvas.Fill.Color := claBlack; Image1.Bitmap.
假设我在Firemonkey有一个小的位图(例如32×24像素)。所以我把一个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,32,24),AllCorners,$FF);
    Image1.Bitmap.Canvas.DrawLine(PointF(1,1),PointF(10,10),$FF);
  finally
    Image1.Bitmap.Canvas.EndScene;
    Image1.Bitmap.BitmapChanged;
  end;

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

我的备忘录的输出是:

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

此功能自动计算绘制时的像素位置而不模糊。

谢谢

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读