【发布时间】:2012-07-17 19:52:35
【问题描述】:
我在另一个“下方”图像的顶部显示透明图像。
在这种情况下,底部(实心)图像是棋盘格,顶部图像是狮子(透明):
=
原因是为了更好地显示透明区域,因为通常您看不到哪些区域是透明的。
问题是,位图的尺寸可以是任意大小,因此网格也需要与位图的大小相同。
如果您愿意,一种肮脏的方法是创建一个更大版本的上述棋盘网格,大小为 2000x2000,然后根据您正在使用的位图的大小,您可以调整网格画布的大小以匹配.这并不理想,因为这意味着将大型棋盘格位图与您的应用程序一起存储,然后意味着调整它的大小,这可能无法根据纵横比等给出正确的结果。
我认为正确的方法是以编程方式渲染棋盘网格,例如:
procedure RenderGrid(Source: TBitmap; Height, Width: Integer;
Size: Integer; Color1, Color2: TColor);
begin
end;
这将允许自定义具有不同大小和颜色的网格,而不必担心存储大型棋盘网格位图和调整大小的开销。
但是我不确定如何将网格绘制到位图上?我的一个想法是你需要循环遍历位图的每一行并以这种方式着色?我不确定。
这涉及我不擅长的数学和计算。如果您能告诉我在位图上渲染网格的最有效方法,我将不胜感激。
【问题讨论】:
-
你的问题有点复杂。国际象棋/棋盘被定义为 8x8 方格,因此
size无关紧要,高度也是如此。每个正方形的大小(两个维度)都恰好为Width div 8,因此您实际上只需要传入Source和两个TColor参数。 (另外,我认为Source确实是Dest,就像在包含棋盘的目标图像中一样,不是吗?) -
@KenWhite 我不确定网格叫什么,所以我只使用了我现在看到的棋盘名称,这可能会产生误导。我也明白你对 Source/Dest 的意思,事实上它可以在示例中被命名为 ABitmap 或其他东西。