2013-04-07 4 views
1

Gdk.Pixbuf (_pixbuf 아래)을 Windows Forms (System.Drawing) 비트 맵으로 변환하려면 어떻게합니까? 아래는 Gtk.DotNet.Graphics을 사용하는 코드이지만 흰색 이미지 만 제공합니다. 더 효과적이고 직접적인 방법이 있습니까? 나는 Mono에 대해 C#을 사용하고 있지만 다른 언어로 대답을하면 변환 할 수 있습니다.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

투명도가있는 pixbuf와 함께 작동하지 않는 것 같습니다 ... Gdk.Pixbuf.SaveToBuffer() 또는 Bitmap의 버퍼 읽기에 버그가있을 수 있습니다 (사용하고 있습니다). 모노). 투명도를 먼저 제거하려고합니다 ... –

+0

오늘 아침에 시도했습니다. BMP 및 JPEG가 아닌 순수한 PNG 및 ICO 용으로 작업했습니다. JPEG는 투명도를 전혀 지원하지 않지만 BMP는 알파 채널을 지원합니다. BMP가 여기서 왜 작동하지 않는지 잘 모르겠습니다. –