leadtools-sdk - WPF 裁剪图像的一部分
问题描述
我创建了一个 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。对我所缺少的任何帮助将不胜感激。
解决方案
问题是 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);
}
推荐阅读
- arduino - 使用 getRXMRAWX() 对 Arduino 进行编程以输出 UBX 消息
- javascript - Fabric.js 翻转时移动多边形形状的点失败
- reactjs - 导出 react-bootstrap-table2 到 excel 或者 csv 不好
- python - 在 Python 中测试类的正确方法是什么?
- typescript - ts-expect-error 仅针对特定类型的错误
- arrays - 用逗号、空格和数字构建两个数组并打印出来
- wordpress - 包装盒中的 Woocommerce 运输产品
- sql - Firebird 如何在 ORDER BY 中使用带有子查询列的 IIF
- java - JWT getPrincipal 错误,对 Authentication 的引用不明确
- r - 如何设置打印回归残差/拟合值的表格以一次显示多列?