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

C# 当位图转换为字节数组,然后转换为内存流并保存时,图像颜色会反转,c#,image,memorystream,C#,Image,Memorystream,当位图转换为字节数组,然后转换为内存流并保存时,图像颜色会反转。这段代码是在我的网站上创建动态图像的一部分 以上代码正确保存图像 但当bmp转换为memorystream并保存时,背景变为黑色。 下面的代码生成黑色图像 var memStream = new MemoryStream(); bmp.Save(memStream, ImageFormat.Jpeg); var bytes = memStream.ToArray

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

以上代码正确保存图像

但当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默认为黑色。看

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

bmp.Save("ss.jpg");