2008-12-08 40 views
6

Có thư viện .NET nào tôi có thể sử dụng để tạo hình ảnh GIF của riêng mình không?Làm cách nào để tạo hình ảnh GIF trong .NET?

Ít nhất tôi muốn xây dựng pixel theo điểm ảnh. Tốt hơn sẽ là hỗ trợ cho văn bản và hình dạng.

Đây là ví dụ về những gì tôi đang cố gắng làm. Tôi đã giả lập điều này trong Photoshop & hellip;

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

Bạn đề xuất điều gì?

+0

Có bất kỳ lý do cụ thể là cần phải được hình ảnh một định dạng .gif? Lý do duy nhất tôi có thể nghĩ đến khi sử dụng một .gif là nếu hình ảnh cần được làm động. Nếu không, các định dạng khác (chẳng hạn như png và jpg) cung cấp tốc độ nén tốt hơn và linh hoạt hơn ... –

+0

Không có lý do cụ thể. GIF là một định dạng lossless đơn giản với khả năng tương thích trình duyệt web rộng. –

Trả lời

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

việc thực hiện

+0

Chính xác. Đọc trên không gian tên System.Drawing để hiểu làm thế nào để vẽ các dòng cần thiết vv –

+0

Bạn da man. Nếu điều này không nhận được séc, tôi sẽ bỏ SO. – MusiGenesis

+0

Mặc dù về mặt kỹ thuật, bạn không thể thiết lập pixel bằng đối tượng Đồ họa (bạn có thể điền hình chữ nhật 1 pixel). SetPixel và GetPixel nằm trên đối tượng Bitmap. – MusiGenesis

0

Tại sao không sử dụng điều khiển biểu đồ thay vì cố gắng tạo GIF? Trừ khi các yêu cầu là nghiêm chỉnh để tạo ra GIF đặc biệt này, tôi nghĩ việc sử dụng một điều khiển biểu đồ sẽ giúp bạn linh hoạt hơn.

+0

Đó có phải là một phần của khung công tác .NET không? –

+0

No. Nhưng câu hỏi không giới hạn câu trả lời cho .NET Framework. Nó nói một "thư viện net". – Tundey

+0

thực sự, bây giờ là: http://weblogs.asp.net/scottgu/archive/2008/11/24/new-asp-net-charting-control-lt-asp-chart-runat-quot-server-quot -gt.aspx –

0

Tôi thích my company's products. Bạn sẽ có thể đọc/ghi gifs và tạo chúng từ toàn bộ vải. Đó là thời gian chạy bản quyền miễn phí cho ứng dụng dành cho máy tính để bàn, được cấp phép cho máy chủ.

1

Tại sao không chỉ sử dụng không gian tên System.Drawing? Mọi thứ bạn cần phải ở trong đó.

4

lưu ý rằng ngoài các phương pháp bmp.Save(filename, ImageFormat.Gif);, có một bmp.Save(stream, ImageFormat.Gif); mà cho phép bạn tạo & ra một hình ảnh đến một trang web, mà không có nó bao giờ hết để lưu vào máy chủ của bạn đĩa cứng.

2

Đây là khởi đầu để làm như vậy với các lớp trong không gian tên System.Drawing. Nó vẽ một đường thẳng với hai hộp để chứng minh sự hỗ trợ cho các hình dạng ở một mức độ cao hơn chỉ đơn giản là thiết lập các điểm ảnh.

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

Một ví dụ về cách sử dụng một HTTPHandler để tạo ra các hình ảnh và gửi ra trong một dòng (sử dụng mã hình ảnh đã được đăng ở đây).

Sử dụng:

<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

Thực ra, bạn có thể bỏ qua BinaryStream và viết trực tiếp vào Reposnse: bmp.Save (Response.OutputStream, ImageFormat.Gif); –

Các vấn đề liên quan