找回密码
 立即注册

QQ登录

只需一步,快速开始

justin229947467

注册会员

1

主题

3

帖子

11

积分

注册会员

积分
11
最新发帖
justin229947467
注册会员   /  发表于:2017-8-1 16:01  /   查看:3823  /  回复:4
  private void AnnAutomation_Draw(object sender, AnnDrawDesignerEventArgs e)
      {
            if (e.OperationStatus == AnnDesignerOperationStatus.End)
            {
                if (e.Object is AnnRectangleObject)
                {
                   double areaInPixels= e.Object.GetArea();
                    var DPIx = imageViewer.Image.XResolution;
                    var DPIy = imageViewer.Image.YResolution;
                    double dotsPerMMx = DPIx / 25.4;
                    double dotsPerMMy = DPIy / 25.4;
                    //1 in = 25.4 mm
                    double areaInMMSquare = areaInPixels / (dotsPerMMx * dotsPerMMy);
                    MessageBox.Show(areaInPixels + "\n" + areaInMMSquare);
                }
            }
         //AnnLabel label = e.Object.Labels["AnnObjectName"];
         //label.IsVisible = true;
         //label.Text = e.Object.FriendlyName;
      }

4 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-8-1 18:19:14
沙发
可以参考以下代码进行转换。
  1.             if (e.OperationStatus == AnnDesignerOperationStatus.End)
  2.             {
  3.                 if (e.Object is AnnRectangleObject)
  4.                 {
  5.                     var annRect = e.Object.Bounds;
  6.                     var annPixels = Automation.Container.Mapper.RectFromContainerCoordinates(annRect, AnnFixedStateOperations.None);
  7.                     
  8.                     MessageBox.Show( "面积是\n" + annPixels.Width*annPixels.Height);
  9.                 }
  10.             }
复制代码



回复 使用道具 举报
justin229947467
注册会员   /  发表于:2017-8-1 22:47:31
板凳
谢谢您及时的回复

我的目的画标注矩形,任意多边形时,计算出矩形或任意多边形的面积,以厘米或毫米为单位。
上面你提供的方法,是算出的面积是像素单位
另外,leadtools提供了任意多边形的面积方法getarea,但我不知道如何转换。
下面是leadtools官网找到的方法,不知道哪里出了点岔子,老是转换不出正确的结果值。
If you have the horizontal and vertical (x & y) DPI of the image, you can use the following conversions:
double dotsPerMMx = DPIx / 25.4;
double dotsPerMMy = DPIy / 25.4;
double areaInMMSquare = areaInPixels / (dotsPerMMx * dotsPerMMy);
This means if the pixel count in the area is 800, and the image has 20 dots per mm (both x and y), the same area in square millimeters would be:
800 / (20 * 20) = 800/400 = 2 mm^2

Thanks,
Maen Badwan
LEADTOOLS Technical Support
回复 使用道具 举报
justin229947467
注册会员   /  发表于:2017-8-1 23:40:40
地板
使用ImageViewer画矩形、椭圆、任意多边形标注时,我希望计算出它的面积,面积的单位要转换为厘米或毫米。我查阅了相关资料,使用了AnnObject.GetArea方法并对得到的值进行了转换,但结果总是不正确。

能提供一下,具体一点的代码吗,非常感谢。
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-8-2 12:33:14
5#
本帖最后由 Richard.Ma 于 2017-8-2 14:19 编辑

e.Object.Bounds.Width* e.Object.Bounds.Height,这个就是和你计算的矩形面积一样的,getarea只能计算矩形面积

你可以用width*height/2计算椭圆面积,多边形是无法计算的,getarea 这个方法也无法计算多边形
至于你说要计算为单位为厘米,这个可以根据你的dpi进行转换
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部