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, DIBs, GDI, and GDI+ refer to Using 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";
}