我正在尝试将具有透明性的Bitmap类保存为具有透明度的png文件。 我没有运气。
这就是我正在做的事情
Bitmap ret = new Bitmap(bWidth, bHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
ret.Save(filename, ImageFormat.Png);
我也尝试用文件流保存文件,这没什么区别。
当图像在图片框中时,透明度存在,但是当我保存时,我只是得到黑色背景。
我真的不想使用任何第三方代码,他们找到了办法,我也愿意。
感谢。
答案 0 :(得分:7)
你确定Bitmap的像素格式是 System.Drawing.Imaging.PixelFormat.Format32bppArgb 吗?我只是偶然发现了这个问题,因为我遇到了同样的问题,但这是因为我正在加载一个没有像素格式的alpha分量的图像。我做了
Bitmap output = original.Clone(rect, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
并正确保存了带有alpha分量的PNG。
此外,如果您使用的是 MakeTransparent(),请确保您的图片中存在透明的颜色。
答案 1 :(得分:2)
我已经完成图像编辑/保存了一段时间但是如果我记得正确的PNG与大多数人不同。我认为你必须使用一个实际的FileStream。
编辑:啊,找到了一个例子here
FileStream imageStream= new FileStream( filename, FileMode.Create );
myBitmap.Save( imageStream, ImageFormat.Png );
imageStream.Close();
EDIT2:经过对此的更多研究后,我认为只有在某些情况下才需要中间步骤。
也有可能因为你正在使用“MakeTransparent”它捕获一个索引的alpha,但是试图根据每个像素的实际alpha值进行保存。您可以尝试实际设置图像的Alpha值。
答案 2 :(得分:2)
原因是Bitmap
类不适用于透明度。
您需要将Bitmap
投射到Image
。
Bitmap ret = new Bitmap(bWidth, bHeight,
System.Drawing.Imaging.PixelFormat.Format32bppArgb);
ret.MakeTransparent(Color.White); // Change a color to be transparent
Image img = (Image) ret;
img.Save(filename, ImageFormat.Png); // Correct PNG save
答案 3 :(得分:1)
ret.MakeTransparent(...);
答案 4 :(得分:1)
您是否尝试过使用Bitmap.MakeTransparent()方法?
答案 5 :(得分:1)
我只是想提醒大家MakeTransparent,正如我在这里建议的那样,只使特定颜色透明。它没有考虑argb图像的Alpha通道。因此,alpha值为100的像素,如果与MakeTransparent提供的颜色不匹配,则不会具有部分透明度。
答案 6 :(得分:0)
保存为PNG需要可搜索的流,如FileStream或MemoryStream。如果你保存到其中一个并从那里开始将有没有GDI +例外或类似。希望这会有所帮助。
答案 7 :(得分:0)
我假设对话框的FilterIndex从0开始...但它实际上从1开始,所以我的图像使用alpha透明度保存为Gifs,而gif不支持alpha透明度。所以我的问题实际上是对话框。
答案 8 :(得分:0)
Portable Network Graphhics(.png)格式支持transpareny,因此将图像集图像格式保存到ImageFormat.Png。
//update image to database
MemoryStream msImage = new MemoryStream();
imgPhoto.Save(msImage, System.Drawing.Imaging.ImageFormat.Png);
byte[] Img = (byte[])msImage.ToArray();
因此,如果以Jpeg等任何其他格式保存,将会失去透明度。希望它有所帮助。
答案 9 :(得分:0)
虽然问题已经很久了,但仍然是代码在我这里工作。
decltype