public static IntPtr ToHBitmap(
RasterImage image
)
image
The source image
A handle to the Windows DDB this method creates.
Converts a Leadtools.RasterImage object into a Windows device-dependent bitmap (DDB). When this method is completed, there are two copies of the image in memory: the DDB and the original Leadtools.RasterImage. Freeing one does not affect the other.
NOTE: This method returns the data in an unmanaged handle. The caller is responsible for freeing the DDB's handle when it is no longer needed using the DeleteObject Windows API. Otherwise, your application will leak resources.
For more information on DDBs, DIBs, GDI and GDI+ refer to Introduction: DIBs, DDBs, and the Clipboard and 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:\LEADTOOLS23\Resources\Images";
}