泥庭

2010年10月12日

Icon を ImageSource に変換する

Filed under: WPF — タグ: — yone64 @ 12:47 PM

最近業務でWPFを扱い始めました。
というわけで、はまった点を覚え書き。

System.Drawing.IconをSystem.Windows.Controls.Imageに表示する

UriがわかっているとXaml上で指定するだけなのだが、コード上で表示しようとすると一筋縄に行かない。ネットで検索すると3つほど答えが見つかった。どれがよいのかはよくわからない。

①MemoryStreamを使用する方法
一度、アイコンをStreamに書き出し、それをImageSourceに指定する。

using(System.IO.MemoryStream s = new System.IO.MemoryStream())
{
	icon.Save(s);
	image1.Source = BitmapFrame.Create(s);
}

②CreateBitmapSourceFromHIconを使用する方法
System.Windows.Interop.ImagingクラスのCreateBitmapSourceFromHIconメソッドを使用する方法

image1.Source = Imaging.CreateBitmapSourceFromHIcon(icon.Handle, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());

③CreateBitmapSourceFromHBitmapを使用する方法
同じくSystem.Windows.Interop.ImagingクラスのCreateBitmapSourceFromHBitmapメソッドを使用する方法

internal static class IconUtilities 
{ 
    [DllImport("gdi32.dll", SetLastError = true)] 
    private static extern bool DeleteObject(IntPtr hObject); 
 
    public static ImageSource ToImageSource(this Icon icon) 
    {             
        Bitmap bitmap = icon.ToBitmap(); 
        IntPtr hBitmap = bitmap.GetHbitmap(); 
 
        ImageSource wpfBitmap = Imaging.CreateBitmapSourceFromHBitmap( 
            hBitmap, 
            IntPtr.Zero, 
            Int32Rect.Empty, 
            BitmapSizeOptions.FromEmptyOptions()); 
 
        if (!DeleteObject(hBitmap)) 
        { 
            throw new Win32Exception(); 
        } 
 
        return wpfBitmap; 
    } 
} 

 

②が一番素直そう。

広告

コメントする »

まだコメントはありません。

RSS feed for comments on this post. TrackBack URI

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

WordPress.com で無料サイトやブログを作成.

%d人のブロガーが「いいね」をつけました。