Leadtools Send comments on this topic. | Back to Introduction - All Topics | Help Version 16.5.9.25
FromHBitmap(IntPtr,IntPtr) Method
See Also  Example
Leadtools Namespace > RasterImage Class > FromHBitmap Method : FromHBitmap(IntPtr,IntPtr) Method



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 RasterImage from the specified Windows device dependent bitmap (DDB).

Syntax

Visual Basic (Declaration)  
Public Overloads 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 = RasterImage.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 RasterImage object.

Example

Visual Basic Copy 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()
   RasterCodecs.Startup()
   Dim codecs As RasterCodecs = New RasterCodecs()
   ' load image as 8-bit
   Dim image As RasterImage = codecs.Load(LeadtoolsExamples.Common.ImagesPath.Path + "IMAGE1.CMP", 8, CodecsLoadByteOrder.Rgb, 1, 1)

   Dim hbitmap As IntPtr = IntPtr.Zero
   hbitmap = image.ToHBitmap()

   Dim tempForm As Form = New Form()

   Dim colors As RasterColor() = image.GetPaintColors(tempForm.CreateGraphics())

   Dim hPalette As IntPtr = IntPtr.Zero
   If Not colors Is Nothing AndAlso colors.Length <= 256 Then
      Dim log As LOGPALETTE256 = New LOGPALETTE256()
      log.palVersion = &H300
      log.palNumEntries = CShort(colors.Length)
      log.palPalEntry = New Byte(1023) {}

      Dim index As Integer = 0
      Dim i As Integer = 0
      Do While i < colors.Length
         log.palPalEntry(index) = colors(i).R
         index = index + 1
         log.palPalEntry(index) = colors(i).G
         index = index + 1
         log.palPalEntry(index) = colors(i).B
         index = index + 1
         log.palPalEntry(index) = 0
         index = index + 1
         i += 1
      Loop

      hPalette = CreatePalette(log)
   End If

   Dim destinationImage As RasterImage = RasterImage.FromHBitmap(hbitmap, hPalette)

   If Not hPalette.Equals(IntPtr.Zero) Then
      DeleteObject(hPalette)
   End If

   codecs.Save(destinationImage, LeadtoolsExamples.Common.ImagesPath.Path + "IMAGE1_FROMHBITMAP.BMP", RasterImageFormat.Bmp, 0)

   destinationImage.Dispose()
   image.Dispose()
   codecs.Dispose()
   DeleteObject(hbitmap)
   RasterCodecs.Shutdown()
End Sub
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.Startup(); 
   RasterCodecs codecs = new RasterCodecs(); 
   // load image as 8-bit 
   RasterImage image = codecs.Load(LeadtoolsExamples.Common.ImagesPath.Path + "IMAGE1.CMP", 8, CodecsLoadByteOrder.Rgb, 1, 1); 
 
   IntPtr hbitmap = IntPtr.Zero; 
   hbitmap = image.ToHBitmap(); 
 
   Form tempForm = new Form(); 
 
   RasterColor[] colors = image.GetPaintColors(tempForm.CreateGraphics()); 
 
   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); 
   } 
 
   RasterImage destinationImage = RasterImage.FromHBitmap(hbitmap, hPalette); 
 
   if(hPalette != IntPtr.Zero) 
      DeleteObject(hPalette); 
 
   codecs.Save(destinationImage, LeadtoolsExamples.Common.ImagesPath.Path + "IMAGE1_FROMHBITMAP.BMP", RasterImageFormat.Bmp, 0); 
 
   destinationImage.Dispose(); 
   image.Dispose(); 
   codecs.Dispose(); 
   DeleteObject(hbitmap); 
   RasterCodecs.Shutdown(); 
}

Remarks

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

Requirements

Target Platforms: Microsoft .NET Framework 3.0, Windows XP, Windows Server 2003 family, Windows Server 2008 family

See Also