gpt4 book ai didi

delphi - 如何计算 Windows 区域 (HRGN) 的面积(以像素为单位)?

转载 作者:行者123 更新时间:2023-12-03 15:20:19 25 4
gpt4 key购买 nike

获取任意 Windows 区域面积的最快方法是什么?

我知道我可以枚举边界矩形的所有点并调用 PtInRegion() 函数,但它似乎不是很快。也许你知道一些更快的方法?

最佳答案

当您调用GetRegionData时,您将获得组成该区域的不重叠矩形的列表。将它们的面积相加,如下所示:

function GetRegionArea(rgn: HRgn): Cardinal;
var
x: DWord;
Data: PRgnData;
Header: PRgnDataHeader;
Rects: PRect;
Width, Height: Integer;
i: Integer;
begin
x := GetRegionData(rgn, 0, nil);
Win32Check(x <> 0);
GetMem(Data, x);
try
x := GetRegionData(rgn, x, Data);
Win32Check(x <> 0);
Header := PRgnDataHeader(Data);
Assert(Header.iType = rdh_Rectangles);

Assert(Header.dwSize = SizeOf(Header^));
Rects := PRect(Cardinal(Header) + Header.dwSize);
// equivalent: Rects := PRect(@Data.Buffer);

Result := 0;
for i := 0 to Pred(Header.nCount) do begin
Width := Rects.Right - Rects.Left;
Height := Rects.Bottom - Rects.Top;
Inc(Result, Width * Height);
Inc(Rects);
end;
finally
FreeMem(Data);
end;
end;

关于delphi - 如何计算 Windows 区域 (HRGN) 的面积(以像素为单位)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11543412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com