保存和加载图像后使用LockBits / UnlockBits时损坏的数据

时间:2016-05-18 16:58:33

标签: c# image bitmap png

我正在编写一个支持多种文件类型的隐写程序。有一个WAV文件的工作实现,然后有一个用于图像文件,目前无法正常工作。

图像载体基本上是.NET类Bitmap和Image的包装器。它使用LockBits / UnlockBits来访问图像中包含的字节数组。当程序完成对字节数组的更改后,它会将其复制回Bitmap。

复制数据并解锁位图后,我使用以下方法保存:

image.Save(destination, ImageFormat.Png);

下次加载Image时,我希望我之前保存的字节数组与我要从保存的Image中提取的字节数组相同(因为PNG是无损的)。但是,情况并非总是如此。

字节数组几乎完全相同,但是一些值为1的字节已被更改为0.除此之外,它实际上没有任何模式,因为它似乎发生在所有通道上。

我错过了Image.Save或PNG格式吗?

编辑:当嵌入完全相同的数据时,它适用于某些图像,但不适用于所有图像,即使它们共享相同的属性(24 bpp和PNG)。

1 个答案:

答案 0 :(得分:0)

保存图像时,您可以指定不同的压缩算法。默认值可能会产生这种不良影响。尝试另一个。

请参阅:
- System.Drawing.Imaging.Encoder Compression
- System.Drawing.Imaging.EncoderValue Enumeration
- Image.Save Method (String, ImageCodecInfo, EncoderParameters)

不要将这些压缩算法与图像质量混淆。图像质量不应影响PNG,因为它们使用无损压缩。