C#GDI +/System.Drawing.Graphics - 创建缓冲区并手动blitting?

Tob*_*son 7 c# graphics drawing gdi+ winforms

我正在创建一个处理非常大的图像文件的cad查看器,我正在尝试以尽可能高的帧速率和低内存占用来优化它.

它使用GDI +渲染到面板上.

目前的缺陷是图像渲染.我正在使用的一些文件参考图像特别大(8000x8000像素).我已经优化了内存使用量,只在它们变得可见时加载它们,并在它们不可用时将它们处理掉.这样可以减少程序内存耗尽的可能性,但可以防止图像过于频繁地加载和卸载; 但是渲染图像本身(context.DrawImage)仍然会带来非常大的开销.

我现在正在探索将图像blitting到某种较小缓冲区的方法,渲染这个(通常小得多)缓冲区,然后在缩放级别发生显着变化时刷新/重建它.

问题是,我无法在GDI中找到任何相关规定.任何人都可以建议我如何实现它?

Tob*_*son 1

GDI Binned 有利于 Direct3D,因为 3D 元素无论如何都会进入方程式。图像变成单个缩略图和更大的图块,根据需要加载/加载。