.NET 中的透明度和 GIF——不一致的行为

发布于 2024-12-14 03:05:45 字数 1182 浏览 2 评论 0原文

我正在尝试使用 .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),第一个和第三个是正确的,保留了透明度,但中间的一个将所有透明像素设置为黑色。我不确定我做错了什么,据我所知最后两行应该是相同的。

这是我正在谈论的示例程序:

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");
        }
    }
}

I am trying to edit and save an image using the .net Bitmap class. Some of the pixels are transparent, and they get converted to black under certain circumstances. If I save the same image like this:

image.Save("copy1.png", System.Drawing.Imaging.ImageFormat.Png);
image.Save("copy2.gif", System.Drawing.Imaging.ImageFormat.Gif);
image.Save("copy3.gif");

(Image being originally a gif) the first and third are correct retaining the transparency, but the middle one sets all the transparent pixels to black. I'm not sure what I am doing wrong, AFAIK the last two lines should be equivalent.

Here is a sample program of what I am talking about:

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");
        }
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

彼岸花似海 2024-12-21 03:05:46

最后一行

copy.Save("copy3.gif");

不会保存为 gif 文件,而是保存为 png,因为扩展名不足以指定保存格式。
要制作透明 gif,请使用类似

Color c = copy.GetPixel(0, 0);
copy.MakeTransparent(c);

您的代码正在创建新位图,可能会丢失原始 gif 信息。

Your last line

copy.Save("copy3.gif");

does not save as gif file, but as png, since the extension is not sufficient to specify the saving format.
To make a transparent gif, use something like

Color c = copy.GetPixel(0, 0);
copy.MakeTransparent(c);

Your code is creating a new bitmap, possibly losing the original gif informations.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文