gpt4 book ai didi

c# - 何时处理 GDI 对象,特别是位图

转载 作者:太空狗 更新时间:2023-10-30 01:19:06 25 4
gpt4 key购买 nike

我最近了解到需要处理 GDI 对象,因为 GC 不像 C# 中的其他对象那样处理它们。我有一些位图,希望在窗体的整个生命周期内可用,但我不确定一些事情...

  1. 重新创建位图对象时,是否需要先处理掉原来的对象?我想不是,但我想我会检查一下。例如:

    // Global
    Bitmap bmp;

    // In form constructor...
    bmp = new Bitmap(source);

    // In a function...
    if(bmp != null) {
    bmp.Dispose
    bmp = null
    }
    bmp = new Bitmap(source2);

    // On paint (if bmp not null)...
    DrawImage(bmp, rectangle);
  2. 因为我想在表单的整个生命周期内保留位图,我可以简单地在表单关闭事件中处理掉它们吗?

  3. 有比保留位图更好的选择吗?从文件创建每个位图并在绘画上进行处理的速度太慢。使用图像而不是位图会降低图像质量。

提前致谢!

最佳答案

  1. 在这种情况下,您绝对必须调用“Dispose”。不这样做会泄漏旧内存。
  2. 任何真正需要形成生命周期的位图都可以在“关闭”中处理。不过,我不会对每个位图都这样做,因为同时在内存中放置大量位图会快速耗尽内存..
  3. 这取决于您的用例。如果你正在运行某种动画,质量真的需要那么好吗?内存使用与速度。 VS画质,只有你自己知道什么才是最重要的。但是你不能同时拥有这三个。

如果你打算临时使用一个Bitmap,你应该考虑将它包装在一个using block 中,这样它就可以自动处理:

using (Bitmap myBitmap = new Bitmap(src))
{
//Do stuff with the temp bitmap
}

关于c# - 何时处理 GDI 对象,特别是位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24376332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com