在C#应用程序中处理位图

GVi*_*i82 3 .net c# dispose using bitmap

我正在写一个.dll,我正在使用以下方法:

public static Bitmap Merge(Bitmap largeBmp, Bitmap smallBmp)
{
    Bitmap bitmap = new Bitmap(largeBmp.Width + smallBmp.Width, Math.Max(largeBmp.Height, smallBmp.Height));
    using (Graphics g = Graphics.FromImage(bitmap))
    {
        g.DrawImage(largeBmp, 0, 0);
        g.DrawImage(smallBmp, largeBmp.Width, 0);
    }
    return bitmap;
}
Run Code Online (Sandbox Code Playgroud)

我想知道如果多次调用此方法(比方说10000次)将导致内存问题.如果是,我该如何避免呢?我必须打电话disposebitmap对象吗?

编辑:我在while声明中以这种方式调用该方法:

writerOut.WriteVideoFrame(Merge(lastFrame, lastColorFrame));
Run Code Online (Sandbox Code Playgroud)

如何处理BitmapMerge方法返回的(在我使用它之后)?

mp3*_*ret 9

当您返回调用者要使用的位图时 - 调用者有责任在对象完成后处置它.

通过使用'using'语句,您已经尽力确保图形对象得到妥善处理.理论上你应该没事 - 我不担心,除非它成为一个特定的问题 - 然后回来问如何解决它.

关于你的编辑 - 除非'writerOut.WriteVideoFrame'在完成它时处理bimtap然后这将导致问题.

你可以这样做:

var bm = Merge( ... );
writerOut.WriteVideoFrame(bm);
bm.Dispose();
Run Code Online (Sandbox Code Playgroud)

要么

 using(var bm=merge(...))
     writerOut.WriteVideoFrame(bm)
Run Code Online (Sandbox Code Playgroud)