2008-12-08 4 views
6

Gibt es eine .NET-Bibliothek, die ich programmgesteuert zum Generieren meiner eigenen GIF-Bilder verwenden kann?Wie kann ich GIF-Bilder in .NET generieren?

Zumindest möchte ich es Pixel für Pixel erstellen. Besser wäre die Unterstützung für Text und Formen.

Hier ist ein Beispiel für das, was ich versuche zu tun. Ich habe dies in Photoshop verspottet.

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

Was empfehlen Sie?

+0

Gibt es einen besonderen Grund braucht, ist ein GIF-Format Bild zu sein? Der einzige Grund, den ich für die Verwendung eines .gifs denken kann, ist, ob das Bild animiert werden muss. Wenn nicht, bieten andere Formate (wie PNG und JPG) viel bessere Kompressionsraten und mehr Flexibilität ... –

+0

Kein besonderer Grund. GIF ist ein einfaches verlustfreies Format mit großer Webbrowser-Kompatibilität. –

Antwort

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

Job gemacht

+0

Genau. Lesen Sie im System.Drawing-Namespace nach, um zu verstehen, wie Sie die benötigten Linien usw. zeichnen. –

+0

Sie sind ein Mann. Wenn das nicht funktioniert, beende ich SO. – MusiGenesis

+0

Obwohl Sie mit dem Graphics-Objekt technisch nicht wirklich Pixel setzen können (Sie können 1-Pixel-Rechtecke füllen). SetPixel und GetPixel befinden sich im Bitmap-Objekt. – MusiGenesis

0

Warum nicht ein Diagrammsteuerelement verwenden, anstatt zu versuchen, GIFs zu generieren? Wenn die Anforderungen nicht genau diese GIF generieren, denke ich, dass die Verwendung einer Diagrammsteuerung mehr Flexibilität bietet.

+0

Ist das Teil des .NET-Frameworks? –

+0

Nein. Aber die Frage beschränkte die Antworten auf .NET Framework nicht. Es sagte eine ".net-Bibliothek". – Tundey

+0

tatsächlich ist es jetzt: http://weblogs.asp.net/scottgu/archive/2008/11/24/new-asp-net-charting-control-lt-asp-chart-runat-quot-server-quot -gt.aspx –

0

Ich mag my company's products. Sie können Gifs lesen/schreiben und sie aus ganzem Stoff erstellen. Es ist Laufzeit lizenzgebührenfrei für Desktop-Anwendungen, für Server lizenziert.

1

Warum nicht einfach den Namespace System.Drawing verwenden? Alles, was du brauchst, sollte da drin sein.

4

beachten Sie, dass zusätzlich zu dem bmp.Save(filename, ImageFormat.Gif); Verfahren gibt ein bmp.Save(stream, ImageFormat.Gif); ist die Ihnen erlauben, & Ausgabe ein Bild auf einer Webseite zu erstellen, ohne es jemals auf Ihre Server-Festplatte gespeichert.

2

Hier ist der Anfang, dies mit den Klassen im System.Drawing Namensraum zu tun. Es zeichnet eine Linie mit zwei Kästchen, um die Unterstützung für Formen auf einer höheren Ebene zu demonstrieren, als einfach nur Pixel zu setzen.

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

Ein Beispiel, wie einen Httphandler zu verwenden, um das Bild und sendet in einem Strom (mit dem Bildcode bereits hier geschrieben) zu erstellen.

Verwendung:

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

Code:

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

Eigentlich sollten Sie in der Lage sein, den BinaryStream zu überspringen und es direkt in den Reposnse schreiben: bmp.Save (Response.OutputStream, ImageFormat.Gif); –

Verwandte Themen