首页 > 解决方案 > Cyotek ImageBox 获得放大的图像部分

问题描述

我正在使用 Cyotek ImageBox 缩放图像,现在如果我缩放到图像的一部分并且该部分在 ImageBox 中可见,我如何保存在 ImageBox 中可见的图像部分。

标签: c#image

解决方案


GetSourceImageRegion方法允许您获取RectangleF描述在当前状态下可见的图像部分的ImageBox

下面的示例代码将Bitmap根据图像的可见部分创建一个新的。此示例未缩放。

Rectangle visibleImageRegion;
Bitmap result;

visibleImageRegion = Rectangle.Round(imageBox.GetSourceImageRegion());
result = new Bitmap(visibleImageRegion.Width, visibleImageRegion.Height);

using (Graphics g = Graphics.FromImage(result))
{
  g.DrawImage(imageBox.Image, new Rectangle(Point.Empty, visibleImageRegion.Size), visibleImageRegion, GraphicsUnit.Pixel);
}

下一个示例与上面相同,但也会缩放新图像以匹配ImageBox

RectangleF visibleImageRegion;
Bitmap result;
double zoomFactor;
int w;
int h;

visibleImageRegion = imageBox.GetSourceImageRegion();
zoomFactor = imageBox.ZoomFactor;

w = Convert.ToInt32(visibleImageRegion.Width * zoomFactor);
h = Convert.ToInt32(visibleImageRegion.Height * zoomFactor);
result = new Bitmap(w, h);

using (Graphics g = Graphics.FromImage(result))
{
  g.PixelOffsetMode = PixelOffsetMode.HighQuality;
  g.InterpolationMode = InterpolationMode.HighQualityBicubic;

  g.DrawImage(imageBox.Image, new Rectangle(0, 0, w, h), visibleImageRegion, GraphicsUnit.Pixel);
}

您可以连接到控件的ScrollorZoomed事件,以检测何时需要根据用户活动更新图像。


推荐阅读