Cyotek ImageBox获得缩放图像的一部分

时间:2018-05-22 06:01:02

标签: c# image

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

1 个答案:

答案 0 :(得分:0)

使用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);
}

您可以挂钩控件的ScrollZoomed事件,以检测何时需要根据用户活动更新图像。