c# - Cyotek ImageBox 获得放大的图像部分
问题描述
我正在使用 Cyotek ImageBox 缩放图像,现在如果我缩放到图像的一部分并且该部分在 ImageBox 中可见,我如何保存在 ImageBox 中可见的图像部分。
解决方案
该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
orZoomed
事件,以检测何时需要根据用户活动更新图像。
推荐阅读
- oracle - 更新表中每一行的一列 [PL/SQL,unix 脚本]
- go - 当我的简单 Go 程序运行时,为什么结果是死锁?
- postgresql - Postgresql 自行关闭
- image - 如何使用 Chrome 扩展程序扫描网站中的所有图像
- android - Android Compose LazyList - 当新项目添加到列表顶部时保持滚动位置
- aframe - Aframe 布局组件:如何制作球体图像库?
- php - 如何在页面顶部放置文本块?
- python - 由于 ezsheets 和 ezgmail 模块,将 python 脚本打包到 .exe 文件时出错
- ossec - Wazuh 子解码器未正确解析字段
- ruby-on-rails - gem在wsl2上安装mysql,ubuntu 20.04失败