2008-12-08 16 views
6

¿Existe una biblioteca .NET que pueda usar para generar programáticamente mis propias imágenes GIF?¿Cómo puedo generar imágenes GIF en .NET?

Como mínimo me gustaría construirlo píxel por píxel. Mejor sería el soporte para texto y formas.

Aquí hay un ejemplo de lo que intento hacer. Me burlé de esto en Photoshop y hellip;

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

¿Qué recomienda usted?

+0

¿Hay alguna razón en particular se tiene que ser una imagen de formato .gif? La única razón por la que puedo pensar para usar un .gif es si la imagen debe ser animada. De lo contrario, otros formatos (como png y jpg) ofrecen tasas de compresión mucho mejores y más flexibilidad ... –

+0

Sin motivo en particular. GIF es un formato simple sin pérdidas con amplia compatibilidad de navegador web. –

Respuesta

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

hecho

+0

Exactamente. Lea en el Sistema. Dibuje el espacio de nombres para comprender cómo dibujar las líneas necesarias, etc. –

+0

Usted da hombre. Si esto no obtiene el cheque, lo estoy dejando TAN. – MusiGenesis

+0

Aunque técnicamente no puede establecer píxeles con el objeto Graphics (puede rellenar rectángulos de 1 píxel). SetPixel y GetPixel están en el objeto Bitmap. – MusiGenesis

0

¿Por qué no utilizar un control de gráfico en lugar de intentar generar archivos GIF? A menos que los requisitos sean estrictamente para generar este GIF particular, creo que usar un control de gráfico le ofrece más flexibilidad.

+0

¿Es eso parte del framework .NET? –

+0

No. Pero la pregunta no limitó las respuestas a .NET Framework. Dijo una "biblioteca .net". – Tundey

+0

en realidad, ahora es: http://weblogs.asp.net/scottgu/archive/2008/11/24/new-asp-net-charting-control-lt-asp-chart-runat-quot-server-quot -gt.aspx –

0

Me gusta my company's products. Podrás leer/escribir gifs y crearlos a partir de tela completa. Es libre de derechos de autor para aplicaciones de escritorio, con licencia para servidores.

1

¿Por qué no usar simplemente el espacio de nombres System.Drawing? Todo lo que necesitas debe estar ahí.

4

nota de que, además del método bmp.Save(filename, ImageFormat.Gif);, hay una bmp.Save(stream, ImageFormat.Gif); que le permiten crear & salida de una imagen a una página web, sin que nunca a salvo a sus servidores de disco duro de empleo.

2

Aquí está el comienzo de hacerlo con las clases en el espacio de nombres System.Drawing. Dibuja una línea con dos casillas para demostrar que admite formas a un nivel más alto que el simple establecimiento de píxeles.

// 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

Un ejemplo de cómo utilizar un HTTPHandler para crear la imagen y enviarla a cabo en una corriente (utilizando el código de imagen ya publicado aquí).

Uso:

<img src="createChart.ashx?data=1"/> 

Código:

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; } } 
} 
+0

En realidad, debería poder omitir el BinaryStream y escribirlo directamente en el Reposnse: bmp.Save (Response.OutputStream, ImageFormat.Gif); –

Cuestiones relacionadas