Creates a new
RasterImage from the specified Windows device dependent bitmap (DDB).
Syntax
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()
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
Requirements
Target Platforms: Microsoft .NET Framework 3.0, Windows XP, Windows Server 2003 family, Windows Server 2008 family
See Also