delphi – 如何计算Windows区域(HRGN)的面积(以像素为单位)?
发布时间:2020-12-15 09:38:27 所属栏目:大数据 来源:网络整理
导读:获取任意 Windows区域的最快方法是什么? 我知道我可以枚举边界矩形的所有点并调用PtInRegion()函数,但它似乎不是很快.也许你知道一些更快的方法? 解决方法 当您拨打 GetRegionData 时,您将获得构成该区域的非重叠矩形列表.添加他们的区域,如下所示: funct
获取任意
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,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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |