2013-04-07 6 views
1

Как вы преобразовываете Gdk.Pixbuf (_pixbuf ниже) в Windows Forms (System.Drawing) Растровое изображение? Ниже приведен код, который использует Gtk.DotNet.Graphics, но он просто дает белое изображение. Есть ли лучший, более прямой способ, который работает? Я использую C# в Mono, но я могу преобразовать, если у вас есть ответ на другом языке.Преобразование Gdk.Pixbuf в System.Drawing.Bitmap?

public System.Drawing.Bitmap toBitmap() { 
    Gdk.Pixmap pixmap, mask; 
    _pixbuf.RenderPixmapAndMask(out pixmap, out mask, 255); 
    System.Drawing.Graphics graphics = Gtk.DotNet.Graphics.FromDrawable(pixmap); 
    return new System.Drawing.Bitmap(width, height, graphics); 
} 

ответ

2

Вы можете использовать этот метод расширения:

using System.ComponentModel; 
using System.Drawing; 

public static class MyExtensions 
{ 
    public static System.Drawing.Bitmap ToBitmap(this Pixbuf pix) 
    { 
     TypeConverter tc = TypeDescriptor.GetConverter(typeof(Bitmap)); 

     //// Possible file formats are: "jpeg", "png", "ico" and "bmp" 
     return (Bitmap)tc.ConvertFrom(pix.SaveToBuffer("jpeg")); 
    } 
} 

Использование:

{ 
    Pixbuf pxb = new Pixbuf(pixSource); 
    Bitmap bmp = pxb.ToBitmap(); 
} 
+0

Очень приятно! Удобство и простота в одном пакете! –

+0

Кажется, что это не работает (указав png, jpeg или bmp) с pixbuf с прозрачностью ... может быть ошибка в Gdk.Pixbuf.SaveToBuffer() или в считывании буфера Bitmap (я использую Моно). Попробуем сначала удалить прозрачность ... –

+0

Пробовал это сегодня утром. Работал для чистого PNG и ICO, а не для BMP и JPEG. Пока JPEG не поддерживает прозрачность, BMP поддерживает альфа-каналы. Не знаю, почему BMP здесь не работает. –

 Смежные вопросы

  • Нет связанных вопросов^_^