Creates a new
Leadtools.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
Leadtools.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()
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 |
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 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";
} |
Remarks
Requirements
Target Platforms: Silverlight 3.0, Windows XP, Windows Server 2003 family, Windows Server 2008 family, Windows Vista, Windows 7, MAC OS/X (Intel Only)
See Also