繁体   English   中英

在delphi画布中绘制图片的非矩形部分

[英]Drawing a non rectangular part of a picture in delphi canvas

任何人都可以共享示例代码在Delphi画布上绘制图片的非矩形部分吗?

您的问题很模糊。 但是我怀疑您正在寻找的是裁剪区域。 阅读他们。 将目标设备上的剪切区域设置为所需的形状,然后将图像绘制到设备上。 仅将绘制图像中位于裁剪区域内的部分。

您正在寻找GDI路径。 此处开始,它说明了这种情况下的路径,并在左侧提供了链接以说明它们可用的功能。

Google可以提供许多在Delphi中使用路径的示例。 如果找不到,请在此处发表评论,我会为您提供帮助。

Canvas.Ellipse(0, 0, 10, 20); // not a rectangle

我为此功能使用了所谓的运行列表(一般形状并对其进行blitting)。 我也看到过他们也称他们为经商。 通过将形状定义为一组水平线,将形状编码为运行列表,并且每条线是两个整数值(跳过n个像素,复制n个像素)。

这意味着您可以绘制整条线,而仅进行“高度”绘制操作。

因此,定义了一个矩形(从最高角到左角的第一个“跳过”像素(xorg,yorg)。该矩形的width_rect宽,而width_pixels再往前一行。width_pixels可以比图片的宽度宽(对齐字节)

(yorg*width_pixels+xorg  , width_rect),
(width_pixels-width_rect , width_rect),
(width_pixels-width_rect , width_rect),
(width_pixels-width_rect , width_rect),
..
..

这样,您就可以使绘图例程非常通用,并且对于简单的常规形状(矩形,圆形),只需很少的数学就可以预先计算这些列表。 它极大地简化了我的形状处理。

但是,我直接绘制到位图上,而不是画布上,所以我对此无能为力。 有效绘制行的基元,以及从图形中提取行的方法就足够了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM