如何缓存控件的图像

本文关键字:控件 图像 缓存 何缓存 | 更新日期: 2023-09-27 18:30:42

我有 C# 应用程序,但绘画工作C++项目中完成(这是必须的)。

所以我在我的窗口中添加了PictureBox,并将句柄传递给绘图函数。它工作正常。

但是,当控件无效时(我将窗口移动到屏幕外,然后将其移回),结果是部分空的窗口。AFAIK 有两种方法——重新绘制或缓存图像。

重新绘制可能是昂贵的过程(图像不经常更改,但处理很耗时,想想 3d 渲染器),所以我想简单地缓存图像。

如果我没记错的话,从过去直接使用 Win32 API 编程开始,只需设置一些标志即可。WinForms可以吗?如果是,如何?

如何缓存控件的图像

这将有助于:

Bitmap getControlSurface(Control ctl)
{
    bitmap = new Bitmap(ctl.Width, ctl.Height);
    using (Graphics g = Graphics.FromImage(bitmap))
    {
        Point pScreen = PointToScreen(ctl.Location);
        g.CopyFromScreen(pScreen, Point.Empty, ctl.Size);
    }
    return bitmap;
}

如果您知道表面何时刷新,则可以像这样使用它:

 if ( pictureBox1.Image != null) pictureBox1.Image.Dispose();
 pictureBox1.Image =  getControlSurface(pictureBox1);

唯一的问题是PictureBox实际上必须在屏幕上完全可见