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

delphi – 如何计算Windows区域(HRGN)的面积(以像素为单位)?,第1张

概述获取任意 Windows区域的最快方法是什么? 我知道我可以枚举边界矩形的所有点并调用PtInRegion()函数,但它似乎不是很快.也许你知道一些更快的方法? 当您拨打 GetRegionData时,您将获得构成该区域的非重叠矩形列表.添加他们的区域,如下所示: function GetRegionArea(rgn: HRgn): Cardinal;var x: DWord; Data 获取任意 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;
总结

以上是内存溢出为你收集整理的delphi – 如何计算Windows区域(HRGN)的面积(以像素为单位)?全部内容,希望文章能够帮你解决delphi – 如何计算Windows区域(HRGN)的面积(以像素为单位)?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1268785.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存