作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
获取任意 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/
我正在尝试使用 Leadtools Version 20 来自动清理一些图像(去除黑边、去除线条、去歪斜……)。由于某些 API 仅适用于黑白图像,因此我在内存中创建了图像的拷贝,并使用 L_Colo
获取任意 Windows 区域面积的最快方法是什么? 我知道我可以枚举边界矩形的所有点并调用 PtInRegion() 函数,但它似乎不是很快。也许你知道一些更快的方法? 最佳答案 当您调用GetRe
在 MSDN ,区域定义如下 A region is a rectangle, polygon, or ellipse (or a combination of two or more of thes
我是一名优秀的程序员,十分优秀!