5

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

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

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

数字线图形 http://img143.imageshack.us/img143/5458/dollarlineot9.gif

你有什么建议吗?

4

8 回答 8

12
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);

任务完成

于 2008-12-08T18:28:12.230 回答
4

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

于 2008-12-08T18:33:21.347 回答
2

这是对命名空间中的类进行此操作的开始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();
        }
    }
}
于 2008-12-08T18:37:05.910 回答
1

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

于 2008-12-08T18:27:26.553 回答
1

如何使用 HTTPHandler 创建图像并在流中发送的示例(使用此处已发布的图像代码)。

采用:

<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; } }
}
于 2008-12-08T18:41:21.017 回答
0

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

于 2008-12-08T18:23:51.583 回答
0

我喜欢我公司的产品。您将能够读/写 GIF 并用整块布料创建它们。它是桌面应用程序的运行时免版税,许可用于服务器。

于 2008-12-08T18:25:27.990 回答
0

使用 ASP.NET 即时生成图像(2002 年 2 月 22 日)作者:Stephen Walther

于 2008-12-08T18:39:01.850 回答