【问题标题】:How can I generate GIF images in .NET?如何在 .NET 中生成 GIF 图像?
【发布时间】:2010-09-25 21:46:53
【问题描述】:

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

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

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

Number line graphic http://img143.imageshack.us/img143/5458/dollarlineot9.gif

你有什么推荐的?

【问题讨论】:

  • 是否有任何特殊原因需要成为 .gif 格式的图像?我能想到使用 .gif 的唯一原因是图像是否需要动画。如果不是,其他格式(例如 png 和 jpg)提供更好的压缩率和更大的灵活性...
  • 没有特别的原因。 GIF 是一种简单的无损格式,具有广泛的网络浏览器兼容性。

标签: .net image gif image-generation


【解决方案1】:
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);

任务完成

【讨论】:

  • 没错。阅读 System.Drawing 命名空间以了解如何绘制所需的线条等。
  • 虽然从技术上讲,您不能真正使用 Graphics 对象设置像素(您可以填充 1 像素的矩形)。 SetPixel 和 GetPixel 在 Bitmap 对象上。
  • 我的立场得到了适当的纠正。注释应为“使用 g 和/或 bmp 来...”
  • 接受与否,这似乎不允许 GIF 图像中的动画。 (并不是说我认为网络需要更多,而是为了完成。)
  • 制作动画 GIF 需要什么?
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    这是使用 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();
            }
        }
    }
    

    【讨论】:

      【解决方案4】:

      如何使用 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; } }
      }
      

      【讨论】:

      • 其实应该可以跳过BinaryStream直接写入Reposnse:bmp.Save(Response.OutputStream, ImageFormat.Gif);
      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

        【解决方案7】:

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

        【讨论】:

          【解决方案8】:

          Generating Images On-the-Fly with ASP.NET(2002 年 2 月 22 日),作者:Stephen Walther

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-08-15
            • 2022-01-06
            • 2010-12-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-10-21
            • 2015-04-15
            相关资源
            最近更新 更多