当位图转换为字节数组然后转换为内存流并保存时,图像颜色会反转

image color is becoming inverted when bitmap is converted to byte array and then to memory stream and saved

当位图转换为字节数组然后到内存流并保存时,图像颜色会发生反转。此代码是我网站上动态图像创建的一部分 ommrudraksha.com

 using (var bmp = new System.Drawing.Bitmap(width + 10, height + 10))
            {
                using (Graphics g = Graphics.FromImage(bmp))
                {
                    g.Flush();
                    bmp.Save("ss.jpg");
                 }
            }

以上代码正确保存图像。

但是当bmp转成memorystream保存时,背景变黑了。 下面的代码生成黑色图像。

            var memStream = new MemoryStream();
            bmp.Save(memStream, ImageFormat.Jpeg);
            var bytes = memStream.ToArray();
            var ms2 = new MemoryStream(bytes);
            Bitmap.FromStream(ms).Save("ss1.jpg");

让我们先检查一下您的绘图代码:

bmp.Save("ss.jpg");

在您的情况下,此操作实际上是保存为“PNG”文件格式,与文件名无关。我使用十六进制编辑器发现了这一点。 Windows 足够聪明,可以检查文件头,因此即使扩展名错误,您仍然可以预览或以其他方式打开它。您还可以使用第二个参数明确指定输出格式。

默认情况下,新的 PNG 也是透明的。某些图像格式可能默认为黑色,即使它们支持 alpha 通道(例如 BMP 和 GIF)。这意味着如果你真的想保存为 BMP,你将不得不做一些额外的处理。


这让我明白为什么你的输出图像是黑色的。 Jpeg 根本不支持透明,所以在转换透明PNG 时,Jpeg 默认为黑色。参见 this post

如果您需要透明度,则必须使用支持它的图像格式。您可能还必须先清除整个矩形,具体取决于格式。