【发布时间】:2011-08-18 11:26:04
【问题描述】:
我在我的应用程序中处理位图,出于某些目的,我需要创建位图的深层副本。有没有优雅的方法来做到这一点?
我试过了
Bitmap deepCopy = original.Clone();
,显然这不会创建深层副本,而是创建浅层副本。 我的下一个尝试是创建一个新的位图
Bitmap deepCopy = new Bitmap(original);
不幸的是,这个构造函数是 Bitmap(Image),而不是 Bitmap(Bitmap),Bitmap(Image) 会将我漂亮的 8bppIndexed Pixelformat 转换为不同的格式。
另一个尝试是使用 MemoryStream
public static Bitmap CreateBitmapDeepCopy(Bitmap source)
{
Bitmap result;
using (MemoryStream stream = new MemoryStream())
{
source.Save(stream, ImageFormat.Bmp);
stream.Seek(0, SeekOrigin.Begin);
result = new Bitmap(stream);
}
return result;
}
好吧,这也不起作用,因为 MemoryStream 必须在 Bitmap 的整个生命周期中打开。
所以,我总结了我所有的死胡同,我真的很想看到一个很好的优雅的方式来创建位图深拷贝。谢谢你:)
【问题讨论】: