You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何保存Cyotek ImageBox中缩放后的可见图像区域?

保存Cyotek ImageBox可见区域图片的方法

嘿,我对Cyotek ImageBox的这个操作挺熟的,给你一步步拆解怎么实现:

  • 第一步:获取当前可见区域的信息
    Cyotek ImageBox自带了Viewport属性,直接用它就能拿到当前可见区域的Rectangle对象——这个矩形包含了在控件中显示的那部分原始图片的位置和尺寸,完全不用你自己算缩放后的坐标,省心得很。

  • 第二步:创建对应大小的空白位图
    用Viewport的宽高创建一个新的Bitmap实例,用来承载我们要保存的可见区域:

    Bitmap visibleAreaBitmap = new Bitmap(imageBox.Viewport.Width, imageBox.Viewport.Height);
    
  • 第三步:把可见区域绘制到新位图上
    借助GDI+的Graphics对象,把原始图片中Viewport对应的区域绘制到刚才创建的空白位图里:

    using (Graphics graphics = Graphics.FromImage(visibleAreaBitmap))
    {
        // 参数分别是:原始图片、新位图的绘制区域、原始图片中要截取的区域、单位
        graphics.DrawImage(imageBox.Image, 
                          new Rectangle(0, 0, visibleAreaBitmap.Width, visibleAreaBitmap.Height),
                          imageBox.Viewport, 
                          GraphicsUnit.Pixel);
    }
    
  • 第四步:保存并释放资源
    最后调用Save方法把新位图存到你指定的路径,支持PNG、JPG等常见格式。记得用完要释放位图资源,避免内存泄漏:

    visibleAreaBitmap.Save(@"D:\SavedImages\my-visible-region.jpg", ImageFormat.Jpeg);
    visibleAreaBitmap.Dispose();
    

额外小提示

  • 不管你是缩放了图片还是拖动了滚动条,Viewport都会自动更新为当前的可见区域,所以这段代码在任何缩放/滚动状态下都能正常工作。
  • 把Graphics和Bitmap放在using块里是个好习惯,能自动帮你释放资源,不用手动操心。

内容的提问来源于stack exchange,提问作者Rawat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:18:14