LEADTOOLS GDI/GDI+ (Leadtools.Drawing assembly) Send comments on this topic. | Back to Introduction - All Topics | Help Version 17.0.3.29
FromHBitmap(IntPtr,IntPtr) Method
See Also 



hbitmap
Handle to the Windows DDB.
hpalette
Handle to the Windows palette. This value can be IntPtr.Zero if the DDB is dependent on a device that is greater than 8 bits, or if the image will use the system palette.
hbitmap
Handle to the Windows DDB.
hpalette
Handle to the Windows palette. This value can be IntPtr.Zero if the DDB is dependent on a device that is greater than 8 bits, or if the image will use the system palette.
Creates a new Leadtools.RasterImage from the specified Windows Device Dependent Bitmap (DDB).

Syntax

Visual Basic (Declaration) 
Overloads Public Shared Function FromHBitmap( _
   ByVal hbitmap As IntPtr, _
   ByVal hpalette As IntPtr _
) As RasterImage
Visual Basic (Usage)Copy Code
Dim hbitmap As IntPtr
Dim hpalette As IntPtr
Dim value As RasterImage
 
value = RasterImageConverter.FromHBitmap(hbitmap, hpalette)
C# 
public static RasterImage FromHBitmap( 
   IntPtr hbitmap,
   IntPtr hpalette
)
C++/CLI 
public:
static RasterImage^ FromHBitmap( 
   IntPtr hbitmap,
   IntPtr hpalette
) 

Parameters

hbitmap
Handle to the Windows DDB.
hpalette
Handle to the Windows palette. This value can be IntPtr.Zero if the DDB is dependent on a device that is greater than 8 bits, or if the image will use the system palette.

Return Value

The newly create Leadtools.RasterImage object.

Example

Visual BasicCopy Code
<DllImport("gdi32")> _
   Private Shared Function CreatePalette(ByVal lplgpl As LOGPALETTE256) As IntPtr
   End Function
   <DllImport("gdi32")> _
   Private Shared Function DeleteObject(ByVal hObject As IntPtr) As Boolean
   End Function

   <StructLayout(LayoutKind.Sequential, Pack:=1)> _
   Private Class LOGPALETTE256
      Public palVersion As Short
      Public palNumEntries As Short
      <MarshalAs(UnmanagedType.ByValArray, SizeConst:=1024)> _
      Public palPalEntry() As Byte
   End Class


   Public Sub FromHBitmapExample()
      Dim codecs As New RasterCodecs()

      ' load image as 8-bit
      Using image As RasterImage = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "Image1.cmp"), 8, CodecsLoadByteOrder.Rgb, 1, 1)
         Dim hbitmap As IntPtr = IntPtr.Zero
         hbitmap = RasterImageConverter.ToHBitmap(image)

         Dim colors() As RasterColor

         Using btmp As New Bitmap(1, 1)
            Using g As Graphics = Graphics.FromImage(btmp)
               colors = RasterImagePainter.GetPaintColors(image, g)
            End Using
         End Using

         Dim hPalette As IntPtr = IntPtr.Zero
         If Not IsNothing(colors) AndAlso colors.Length <= 256 Then
            Dim log As New LOGPALETTE256()
            log.palVersion = &H300
            log.palNumEntries = CType(colors.Length, Short)
            ReDim log.palPalEntry(1023)

            Dim index As Integer = 0
            For i As Integer = 0 To colors.Length - 1
               log.palPalEntry(index + 0) = colors(i).R
               log.palPalEntry(index + 1) = colors(i).G
               log.palPalEntry(index + 2) = colors(i).B
               log.palPalEntry(index + 3) = 0
               index = index + 4
            Next

            hPalette = CreatePalette(log)
         End If

         Using destinationImage As RasterImage = RasterImageConverter.FromHBitmap(hbitmap, hPalette)
            codecs.Save(destinationImage, Path.Combine(LEAD_VARS.ImagesDir, "Image1_FromHBitmap.bmp"), RasterImageFormat.Bmp, 0)
         End Using

         If hPalette <> IntPtr.Zero Then
            DeleteObject(hPalette)
         End If

         DeleteObject(hbitmap)
      End Using

      codecs.Dispose()
   End Sub

Public NotInheritable Class LEAD_VARS
   Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images"
End Class
C#Copy Code
[DllImport("gdi32")]
   private static extern IntPtr CreatePalette(LOGPALETTE256 lplgpl);
   [DllImport("gdi32")]
   private static extern bool DeleteObject(IntPtr hObject);
   [StructLayout(LayoutKind.Sequential, Pack = 1)]
   private class LOGPALETTE256
   {
      public short palVersion;
      public short palNumEntries;
      [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1024)]
      public byte[] palPalEntry;
   }


   public void FromHBitmapExample()
   {
      RasterCodecs codecs = new RasterCodecs();

      // load image as 8-bit
      using(RasterImage image = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir,"Image1.cmp"), 8, CodecsLoadByteOrder.Rgb, 1, 1))
      {
         IntPtr hbitmap = IntPtr.Zero;
         hbitmap = RasterImageConverter.ToHBitmap(image);

         RasterColor[] colors;

         using(Bitmap btmp = new Bitmap(1, 1))
         {
            using(Graphics g = Graphics.FromImage(btmp))
            {
               colors = RasterImagePainter.GetPaintColors(image, g);
            }
         }

         IntPtr hPalette = IntPtr.Zero;
         if(colors != null && colors.Length <= 256)
         {
            LOGPALETTE256 log = new LOGPALETTE256();
            log.palVersion = 0x300;
            log.palNumEntries = (short)colors.Length;
            log.palPalEntry = new byte[1024];

            int index = 0;
            for(int i = 0; i < colors.Length; i++)
            {
               log.palPalEntry[index++] = colors[i].R;
               log.palPalEntry[index++] = colors[i].G;
               log.palPalEntry[index++] = colors[i].B;
               log.palPalEntry[index++] = 0;
            }

            hPalette = CreatePalette(log);
         }

         using(RasterImage destinationImage = RasterImageConverter.FromHBitmap(hbitmap, hPalette))
         {
            codecs.Save(destinationImage,Path.Combine(LEAD_VARS.ImagesDir, "Image1_FromHBitmap.bmp"), RasterImageFormat.Bmp, 0);
         }

         if(hPalette != IntPtr.Zero)
         {
            DeleteObject(hPalette);
         }

         DeleteObject(hbitmap);
      }

      codecs.Dispose();
   }

static class LEAD_VARS
{
   public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images";
}

Remarks

For more information on DDBs and DIBs, refer to Using DIBs, DDBs, and the Clipboard.

For more information refer to RasterImage and GDI/GDI+.

Requirements

Target Platforms: Silverlight 3.0, Windows XP, Windows Server 2003 family, Windows Server 2008 family, Windows Vista, Windows 7, MAC OS/X (Intel Only)

See Also