public static RasterImage FromHBitmap(
IntPtr hbitmap,
IntPtr hpalette
)
Public Overloads Shared Function FromHBitmap( _
ByVal hbitmap As IntPtr, _
ByVal hpalette As IntPtr _
) As RasterImage
public:
static RasterImage^ FromHBitmap(
IntPtr hbitmap,
IntPtr hpalette
)
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.
The newly create Leadtools.RasterImage object.
For more information on DDBs and DIBs, refer to Using DIBs, DDBs, and the Clipboard.
For more information refer to RasterImage and GDI/GDI+.
using Leadtools;
using Leadtools.Codecs;
using Leadtools.Drawing;
using Leadtools.ImageProcessing;
using Leadtools.ImageProcessing.Color;
[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:\LEADTOOLS21\Resources\Images";
}
Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.Drawing
Imports Leadtools.ImageProcessing
Imports Leadtools.ImageProcessing.Color
<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:\LEADTOOLS21\Resources\Images"
End Class
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document