LEADTOOLS GDI/GDI+ (Leadtools.Drawing assembly)
LEAD Technologies, Inc

FromHBitmap(IntPtr,IntPtr) Method

Example 





Handle to the Windows DDB.
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
public static RasterImage FromHBitmap( 
   IntPtr hbitmap,
   IntPtr hpalette
)
'Declaration
 
Public Overloads Shared Function FromHBitmap( _
   ByVal hbitmap As IntPtr, _
   ByVal hpalette As IntPtr _
) As RasterImage
'Usage
 
Dim hbitmap As IntPtr
Dim hpalette As IntPtr
Dim value As RasterImage
 
value = RasterImageConverter.FromHBitmap(hbitmap, hpalette)
public static RasterImage FromHBitmap( 
   IntPtr hbitmap,
   IntPtr hpalette
)
 function Leadtools.Drawing.RasterImageConverter.FromHBitmap(IntPtr,IntPtr)( 
   hbitmap ,
   hpalette 
)
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.
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+.

Example
 
<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
[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";
}
Requirements

Target Platforms: Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

See Also

Reference

RasterImageConverter Class
RasterImageConverter Members
Overload List
ToHBitmap(RasterImage) Method
ChangeFromHBitmap(IntPtr,IntPtr) Method
ChangeToHBitmap(RasterImage) Method
RasterImage.FromDib
RasterImage.ToDib
RasterImage.ChangeFromDib
RasterImage.ChangeToDib

 

 


Products | Support | Contact Us | Copyright Notices

© 2006-2012 All Rights Reserved. LEAD Technologies, Inc.