如何在.NET中生成GIF图像?

如何在.NET中生成GIF图像?,.net,image,gif,image-generation,.net,Image,Gif,Image Generation,是否有一个.NET库可用于以编程方式生成自己的GIF图像 至少我想一个像素一个像素地构建它。更好的方法是支持文本和形状 这是一个我正在尝试做的例子。我在Photoshop上模拟了这个 您有什么建议?为什么不使用图表控件而不是尝试生成GIF?除非严格要求生成这个特定的GIF,否则我认为使用图表控件可以为您提供更大的灵活性 我喜欢。您将能够读/写GIF,并从整个布料中创建GIF。桌面应用程序的运行时免版税,为服务器授权。为什么不使用System.Drawing命名空间?你需要的一切都应该在里面 B

是否有一个.NET库可用于以编程方式生成自己的GIF图像

至少我想一个像素一个像素地构建它。更好的方法是支持文本和形状

这是一个我正在尝试做的例子。我在Photoshop上模拟了这个


您有什么建议?

为什么不使用图表控件而不是尝试生成GIF?除非严格要求生成这个特定的GIF,否则我认为使用图表控件可以为您提供更大的灵活性

我喜欢。您将能够读/写GIF,并从整个布料中创建GIF。桌面应用程序的运行时免版税,为服务器授权。

为什么不使用System.Drawing命名空间?你需要的一切都应该在里面

Bitmap bmp = new Bitmap(xSize, ySize, PixelFormat.Format32bppArgb);
using (Graphics g = Graphics.FromImage(bmp)) {
  // Use g and/or bmp to set pixels, draw lines, show text, etc...
}
bmp.Save(filename, ImageFormat.Gif);

作业完成

注意,除了
bmp.Save(文件名,ImageFormat.Gif)之外方法,有一个
bmp.Save(stream,ImageFormat.Gif)
允许您创建图像并将其输出到网页,而无需将其保存到服务器硬盘。

以下是使用
System.Drawing
命名空间中的类执行此操作的开始。它用两个框画了一条线,以演示对图形的支持,而不仅仅是简单地设置像素

// add a reference to System.Drawing.dll
using System;
using System.Drawing;
using System.Drawing.Imaging;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Bitmap bmp = new Bitmap(400, 100);

            using (Graphics g = Graphics.FromImage(bmp))
            {
                g.FillRectangle(Brushes.White, 0.0f, 0.0f, 400f, 100f);

                // draw line
                using (Pen p = new Pen(Color.Black, 1.0f))
                {
                    g.DrawLine(p, 0, 49, 399, 49);
                }

                // Draw boxes at start and end
                g.FillRectangle(Brushes.Blue, 0, 47, 5, 5);
                g.FillRectangle(Brushes.Blue, 394, 47, 5, 5);
            }


            bmp.Save("test.gif", ImageFormat.Gif);
            bmp.Dispose();
        }
    }
}

Stephen Walther(2002年2月22日)

关于如何使用HTTPHandler创建图像并以流形式发送(使用此处已发布的图像代码)的示例

使用:


确切地阅读System.Drawing namespace以了解如何绘制所需的线条等。尽管从技术上讲,您无法使用图形对象设置像素(您可以填充1像素的矩形)。SetPixel和GetPixel位于位图对象上。我将得到适当的更正。注释应为“使用g和/或bmp…”接受与否,这似乎不允许GIF图像中的动画。(并不是说我认为网络需要更多,而是为了完成。)制作动画GIF需要什么?不需要。但这个问题并没有限制对.NET Framework的回答。它说的是一个“.net库”。实际上,它现在是:实际上,您应该能够跳过二进制流并将其直接写入resose:bmp.Save(Response.OutputStream,ImageFormat.Gif);是否有任何特别的原因是需要.gif格式的图像?我能想到的使用.gif的唯一原因是图像是否需要设置动画。如果不是,其他格式(如png和jpg)提供更好的压缩率和更大的灵活性…没有特别的原因。GIF是一种简单的无损格式,与web浏览器兼容。
<img src="createChart.ashx?data=1"/>
public class CreateChart : IHttpHandler
{
     public void ProcessRequest(HttpContext context)
     {
        string data = context.QueryString["data"]; // Or get it from a POST etc

        Bitmap image = new Bitmap(xSize, ySize, PixelFormat.Format32bppArgb);
        using (Graphics g = Graphics.FromImage(Image)) 
        {
           // Use g to set pixels, draw lines, show text, etc...
        }
        BinaryStream s = new BinaryStream();

        image.Save(s, ImageFormat.Gif);

        context.Response.Clear();
        context.Response.ContentType = "image/gif";
        context.Response.BinaryWrite(s);
        context.Response.End();
     }

     public bool IsReusable { get { return false; } }
}