【问题标题】:WPF Cropping a portion of an imageWPF 裁剪图像的一部分
【发布时间】:2018-07-03 07:55:38
【问题描述】:

我创建了一个 WPF 应用程序,我需要允许用户在现有加载的图像(tif 图像)上绘制一个矩形,并让它将坐标/矩形的部分保存为单独的图像。

我正在使用 Leadtools.Windows.Controls 参考并使用 RasterImageViewer

以下是用户完成矩形绘制后的事件处理程序代码。

private void ImageViewer_InteractiveUserRectangle(object sender, RectangleInteractiveEventArgs e)
    {
        if (e.Status == InteractiveModeStatus.End)
        {             

            var img = ImageViewer.Image;

            var top =Convert.ToInt32(e.Bounds.Top);
            var left = Convert.ToInt32(e.Bounds.Left);
            var width = Convert.ToInt32(e.Bounds.Width);
            var height = Convert.ToInt32(e.Bounds.Height);

            var rect = new Leadtools.LeadRect(left, top, width, height);
            var cmd = new Leadtools.ImageProcessing.CropCommand(rect);
            cmd.Run(img);

            _codecs.Save(img, @"c:\temp\test.tif",
                RasterImageFormat.CcittGroup4, 1, 1, 1, -1, CodecsSavePageMode.Append);
        }
    }

我得到一个单独的裁剪图像,但它与矩形绘制的区域不匹配。我已经尝试了示例中的各种方法,但它们都是用于 Windows 窗体应用程序而不是 WPF。对我所缺少的任何帮助将不胜感激。

【问题讨论】:

    标签: leadtools-sdk


    【解决方案1】:

    问题是 ImageViewer UserRectangle 边界返回控制坐标中的坐标,您需要将这些坐标转换为裁剪命令正在寻找的图像坐标。

    根据此处的文档: https://www.leadtools.com/help/leadtools/v19/dh/wl/rectangleinteractiveeventargs-bounds.html

    坐标始终受图像坐标的控制(显示)。 您可以使用 PointToImageCoordinates 和 BoundsToImageCoordinates 来 将控件或显示坐标(屏幕上的内容)中的值映射到 图像坐标(图像像素中的实际 x 和 y 位置)。你 可以使用 PointFromImageCoordinates 和 BoundsFromImageCoordinates 来 在图像坐标中映射一个值(实际的 x 和 y 位置) 图像像素)来控制或显示坐标(屏幕上的内容)。

    这里是更新后的代码,使其适用于您的项目:

    if (e.Status == Leadtools.Windows.Controls.InteractiveModeStatus.End)
    {
      var img = imageViewer.Image;
    
      var imgRect = imageViewer.BoundsToImageCoordinates(e.Bounds);
    
      var top = Convert.ToInt32(imgRect.Top);
      var left = Convert.ToInt32(imgRect.Left);
      var width = Convert.ToInt32(imgRect.Width);
      var height = Convert.ToInt32(imgRect.Height);
    
      var rect = new Leadtools.LeadRect(left, top, width, height);
      var cmd = new Leadtools.ImageProcessing.CropCommand(rect);
      cmd.Run(img);
    
      _codecs.Save(img, @"c:\temp\test.tif",
        RasterImageFormat.CcittGroup4, 1, 1, 1, -1, CodecsSavePageMode.Append);
    }
    

    【讨论】:

      猜你喜欢
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-15
      相关资源
      最近更新 更多