我正在使用Cyotek ImageBox来缩放图像,现在如果我缩放到图像的一部分并且该部分在ImageBox中可见,我该如何保存在ImageBox中可见的那部分图像。
答案 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);
}
您可以挂钩控件的Scroll
或Zoomed
事件,以检测何时需要根据用户活动更新图像。