【发布时间】:2011-12-24 15:35:55
【问题描述】:
我正在尝试使用 .net Bitmap 类编辑和保存图像。一些像素是透明的,在某些情况下它们会转换为黑色。如果我像这样保存相同的图像:
image.Save("copy1.png", System.Drawing.Imaging.ImageFormat.Png);
image.Save("copy2.gif", System.Drawing.Imaging.ImageFormat.Gif);
image.Save("copy3.gif");
(图像最初是 gif)第一个和第三个是正确的保留透明度,但中间的将所有透明像素设置为黑色。我不确定我做错了什么,AFAIK 最后两行应该是等价的。
这是我正在谈论的示例程序:
using System.Drawing;
using System.Net;
namespace TestGif
{
class Program
{
static void Main(string[] args)
{
Bitmap bitmap = new Bitmap(WebRequest.Create(
"http://rlis.com/images/column/ie_icon.gif")
.GetResponse()
.GetResponseStream());
int width = bitmap.Width;
int height = bitmap.Height;
Bitmap copy = new Bitmap(width, height);
var graphics = Graphics.FromImage(copy);
graphics.DrawImage(bitmap, new Point(0, 0));
copy.Save("copy1.png", System.Drawing.Imaging.ImageFormat.Png);
copy.Save("copy2.gif", System.Drawing.Imaging.ImageFormat.Gif);
copy.Save("copy3.gif");
}
}
}
【问题讨论】:
-
要验证最后两行代码是否相同(Save 调用)是否将 copy2.gif 和 copy3.gif 作为相同的文件输出?还是他们不同?我的猜测是扩展不足以提示 Save 方法到你想要的 ImageFormat。
-
第三个 Save() 调用实际上保存了一个 PNG。这不会欺骗任何程序,他们会查看文件头而不是文件扩展名。我猜你的 GIF 阅读器出了点问题。
-
我尝试将图像添加到问题中,但无济于事。 copy2.gif 与 copy3.gif 不同。然而,正如第二位评论者指出的那样,它看起来确实只是以不同名称保存的 PNG 文件。这解释了一些事情,但不能解释为什么 gif 用黑色代替透明像素。
标签: c# .net image-processing transparency gif