Как я могу генерировать GIF-изображения в .NET? - PullRequest
6 голосов
/ 08 декабря 2008

Есть ли библиотека .NET, которую я могу использовать для программного генерирования собственных GIF-изображений?

Как минимум, я хотел бы построить его попиксельно. Лучше будет поддержка текста и фигур.

Вот пример того, что я пытаюсь сделать. Я сделал это в Фотошопе

Графический номер строки http://img143.imageshack.us/img143/5458/dollarlineot9.gif

Что вы рекомендуете?

Ответы [ 8 ]

12 голосов
/ 08 декабря 2008
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);

Работа сделана

4 голосов
/ 08 декабря 2008

обратите внимание, что в дополнение к методу bmp.Save(filename, ImageFormat.Gif); существует bmp.Save(stream, ImageFormat.Gif);, который позволяет создавать и выводить изображения на веб-страницу без сохранения на жесткий диск вашего сервера.

2 голосов
/ 08 декабря 2008

Вот как это происходит с классами в пространстве имен 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();
        }
    }
}
1 голос
/ 08 декабря 2008

Пример использования 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; } }
}
1 голос
/ 08 декабря 2008

Почему бы просто не использовать пространство имен System.Drawing? Все, что вам нужно, должно быть там.

0 голосов
/ 08 декабря 2008

Создание изображений на лету с ASP.NET (22 февраля 2002 г.) Стивеном Вальтером

0 голосов
/ 08 декабря 2008

Мне нравятся продукты моей компании . Вы сможете читать / писать GIF-файлы и создавать их из цельной ткани. Это лицензионное время выполнения для настольных приложений, лицензированное для серверов.

0 голосов
/ 08 декабря 2008

Почему бы не использовать элемент управления диаграммой вместо создания GIF-файлов? Если не предъявляются строгие требования к генерации этого конкретного GIF, я думаю, что использование элемента управления диаграммой обеспечивает большую гибкость.

...