'iCon'에 해당되는 글 1건

  1. 2008/07/24 GDI Object를 WPF로 변환 하여 사용하기 (1)
WPF2008/07/24 15:02

이번 시간에는 GDI나 GDI+에서 사용되는 GDI Object를 WPF의 기본 비트맵 형식인 BitmapSource객체로 변환하는 방법에 대한 내용을 다룹니다. .Net Framework 2.0이하에서 사용하던 System.Drawing.Bitmap or Icon객체를 WPF에서 사용하는 BitmapSource객체로 변환하는 것이라고도 말할 수 있는데요, 기존의 UnManaged Object와 Managed Object 간의 상호 운용 지원을 하는 System.Windows.Interop.Imaging Class를 사용합니다.

System.Windows.Interop.Imaging Class는 아래와 같은 총 3가지의 UnManaged객체를 지원하는 메서드를 제공하며 각각에 대한 설명은 다음과 같습니다.

  • CreateBitmapSourceFromHBitmap : 관리되지 않는 비트맵에 대한 제공된 포인터와 색상표 정보를 기반으로 관리되는 BitmapSource를 반환합니다.
  • CreateBitmapSourceFromHIcon : 관리되지 않는 아이콘 이미지에 대한 제공된 포인터를 기반으로 관리되는 BitmapSource를 반환합니다.
  • CreateBitmapSourceFromMemorySection : 제공된 관리되지 않는 메모리 위치를 기반으로 관리되는 BitmapSource를 반환합니다.

너무나도 쉽게 이름을 잘 풀어 써줘서 특별히 설명을 보지 않아도 함수가 뭐 하는 녀석인지 알 수가 있죠? ㅎㅎ
먼저 Bitmap Object를 BitmapSource로 변환하는 코드를 보겠습니다.

System.Drawing.Bitmap Source = System.Drawing.Bitmap.FromFile("소녀시대짱.jpg");

IntPtr HBitmap = Source.GetHbitmap();

BitmapSource Result = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(HBitmap,

IntPtr.Zero, Int32Rect.Empty,System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());

뭔가 복잡한 듯이 주절주절 써 있는데 알맹이만 빼고 보면 특별한 게 없습니다. -_-
System.Drawing.Bitmap Object를 생성하고, Bitmap Object의 Pointer(HBitmap)를 GetHbitmap메서드를 사용해서 얻습니다. 그리고 System.Windows.Interop.Imaging Class의 CreateBitmapSourceFromHBitmap메서드를 호출하여 BitmapSource를 생성하면 끝! 여기서 중요한 건, CreateBitmapSourceFromHBitmap의 Parameter인데요, 순서대로 UnManaged Bitmap Pointer, Bitmap Color Palette, Source Size, Size Option입니다.

위와 마찬 가지로 아이콘도 간단하게 BitmapSource로 변환할 수 있습니다.

System.Drawing.Icon IconFile = System.Drawing.Icon.ExtractAssociatedIcon("원더걸스.ico");

System.Drawing.Bitmap BitmapData = IconFile.ToBitmap();

IntPtr HBitmap = Source.GetHbitmap();

BitmapSource Result = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(HBitmap,

IntPtr.Zero, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());

System.Drawing.Icon Class의 ExtractAssociatedIcon를 사용해 Icon Object를 생성했습니다. 그리고 ToBitmap 메서드를 사용하여 Bitmap으로 변한 한 뒤 이후 내용은 동일 합니다.

사용자 삽입 이미지

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 곡스