Delphi - Graphics32,绘制抗锯齿圆角矩形
问题描述:
如何使用Graphics32绘制抗锯齿圆角矩形?Delphi - Graphics32,绘制抗锯齿圆角矩形
我设法做一个普通的矩形与TPolygon到bitmap32画布上,但我找不到任何参考绘制圆角。将欣赏一些代码。
答
function GetRoundedFixedRectanglePoints(const Rect: TFloatRect; dx, dy: single): TArrayOfFixedPoint;
var
i, j, k, arcLen: integer;
arcs: array [0 .. 3] of TArrayOfFixedPoint;
begin
//nb: it's simpler to construct the rounded rect in an anti-clockwise
//direction because that's the direction in which the arc points are returned.
with Rect do
begin
arcs[0] := GetArcPointsEccentric(
FloatRect(Left, Bottom -dy*2, Left+dx*2, Bottom), rad180, rad270);
arcs[1] := GetArcPointsEccentric(
FloatRect(Right-dx*2, Bottom -dy*2, Right, Bottom), rad270, 0);
arcs[2] := GetArcPointsEccentric(
FloatRect(Right - dx*2, Top, Right, Top + dy*2), 0, rad90);
arcs[3] := GetArcPointsEccentric(
FloatRect(Left, top, Left+dx*2, Top+dy*2), rad90, rad180);
//close the rectangle
SetLength(arcs[3], Length(arcs[3])+1);
arcs[3][Length(arcs[3])-1] := arcs[0][0];
end;
//calculate the final number of points to return
j := 0;
for i := 0 to 3 do
Inc(j, Length(arcs[i]));
SetLength(Result, j);
j := 0;
for i := 0 to 3 do
begin
arcLen := Length(arcs[i]);
for k := 0 to arcLen -1 do
Result[j+k] := arcs[i][k];
Inc(j, arcLen);
end;
end;
用法:
var
pts: TArrayOfFixedPoint;
begin
pts := GetRoundedFixedRectanglePoints(FloatRect(Left+2, Top+2, Left + Width-2, Top + Height-2), 5, 5);
SimpleFill(ABitmap32, pts, 0, Color32(clBlack));
哪里都是来自这些特效?它似乎不是GR32的一部分。 – hikari
用于Graphics32(GR32_Misc单元)的GR32_Lines库。你可以从http://www.angusj.com/delphi/gr32_lines.php下载它 – pani
我明白了,谢谢。这需要一点时间,看起来扩展需要最新的SVN文件,而不是官方的1.91,它删除了TPolygon32,并与我所有的代码冲突 - - 将检查并在今天晚些时候回复。 – hikari