位图深拷贝更改 PixelFormat

Posted

技术标签:

【中文标题】位图深拷贝更改 PixelFormat【英文标题】:Bitmap deep copy changing PixelFormat 【发布时间】:2013-11-18 09:37:56 【问题描述】:
Bitmap img = new Bitmap("C:\\temp\\images\\file.jpg");

img.PixelFormat 是 Format24bppRgb

当我在做深拷贝时

Bitmap img2 = new Bitmap(img);

img.PixelFormat 改为 Format32bppArgb

为什么会改变像素格式?如果对象不进行深拷贝,如何为对象进行深拷贝?

【问题讨论】:

How to create a Bitmap deep copy 的可能重复项 【参考方案1】:

您可以像这样克隆位图,这将创建一个深层副本:

Bitmap img = new Bitmap("C:\\temp\\images\\file.jpg");

// Clone the bitmap.
Rectangle cloneRect = new Rectangle(0, 0, img.Width, img.Height);
System.Drawing.Imaging.PixelFormat format =
    img.PixelFormat;
Bitmap img2 = img.Clone(cloneRect, format);

【讨论】:

我遇到了 [***.com/questions/1053052/… GDI+ 中发生的一般错误)。我能够通过创建位图的副本来解决它。但现在我注意到它意外地改变了 PixelFormat。不幸的是,这个解决方案并没有解决问题......【参考方案2】:

刚刚找到解决方案,而不是 new Bitmap(img) 使用 Bitmap img2 = (Bitmap) img.Clone(); 不知道这是正确的解决方案,但它可以完成工作。

【讨论】:

以上是关于位图深拷贝更改 PixelFormat的主要内容,如果未能解决你的问题,请参考以下文章

深拷贝与浅拷贝的实现(一)

Java对象的深拷贝

深拷贝呀,浅拷贝,再来一次复习整理

浅拷贝深拷贝UDP协议反射

如何制作 BitmapDrawable 的深拷贝?

[转] js深拷贝和浅拷贝