Changes a LEAD RasterImage object to a Windows Device Independent Bitmap (DIB).
public IntPtr ChangeToDib(
Leadtools.RasterConvertToDibType type
)
Public Function ChangeToDib( _
ByVal type As Leadtools.RasterConvertToDibType _
) As IntPtr
public:
IntPtr ChangeToDib(
Leadtools.RasterConvertToDibType type
)
type
Type of DIB to create. Possible values are:
Value | Meaning |
---|---|
RasterConvertToDibType.BitmapInfoHeader | DIB that uses a BITMAPINFOHEADER |
RasterConvertToDibType.BitmapV4Header | DIB that uses a BITMAPV4HEADER. (Introduced in Windows 95 and Windows NT 4.0) |
RasterConvertToDibType.BitmapV5Header | DIB that uses a BITMAPV5HEADER (Introduced in Windows 2000 and Windows 98) |
A handle to the device independent bitmap (DIB) this method creates.
A DIB consists of one of the following:
followed by a color table and then the bitmap data. The resulting DIB type is determined by the value of the type parameter.
The orientation of the image and color order will depend on how the image was loaded into the RasterImage.
When you no longer need the DIB, you can free it using the Windows GlobalFree function.
This method does not support signed data images. It will throw an exception of type RasterException with code value RasterExceptionCode.SignedDataNotSupported if this RasterImage has a signed data image.
For more information on DDBs and DIBs, refer to Using DIBs, DDBs, and the Clipboard.
This example loads a RasterImage, changes it to a V5 DIB and writes out the DIB as a bitmap file.
using Leadtools;
using Leadtools.Codecs;
using Leadtools.ImageProcessing;
using Leadtools.ImageProcessing.Core;
using Leadtools.ImageProcessing.Color;
using Leadtools.Dicom;
using Leadtools.Drawing;
using Leadtools.Controls;
using LeadtoolsExamples.Common;
using Leadtools.Svg;
[DllImport("Kernel32", CharSet = CharSet.Auto)]
static extern IntPtr GlobalSize(IntPtr hMem);
[DllImport("Kernel32", CharSet = CharSet.Auto)]
static extern IntPtr GlobalLock(IntPtr hMem);
[DllImport("Kernel32", CharSet = CharSet.Auto)]
static extern int GlobalUnlock(IntPtr hMem);
[DllImport("Kernel32", CharSet = CharSet.Auto)]
static extern IntPtr GlobalFree(IntPtr hMem);
[StructLayout(LayoutKind.Sequential, Pack = 1)]
class BITMAPFILEHEADER
{
public ushort bfType;
public uint bfSize;
public ushort bfReserved1;
public ushort bfReserved2;
public uint bfOffBits;
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
class BITMAPINFOHEADER
{
public uint biSize;
public int biWidth;
public int biHeight;
public ushort biPlanes;
public ushort biBitCount;
public uint biCompression;
public uint biSizeImage;
public int biXPelsPerMeter;
public int biYPelsPerMeter;
public uint biClrUsed;
public uint biClrImportant;
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
class RGBQUAD
{
public byte rgbBlue;
public byte rgbGreen;
public byte rgbRed;
public byte rgbReserved;
}
public void ChangeToDibExample()
{
RasterCodecs codecs = new RasterCodecs();
// Load an image
RasterImage image = codecs.Load(Path.Combine(ImagesPath.Path, "Image1.cmp"), 24, CodecsLoadByteOrder.BgrOrGray, 1, 1);
// Change to DIB
IntPtr hdib = image.ChangeToDib(RasterConvertToDibType.BitmapInfoHeader);
// Dispose the image since it is unusable now
image.Dispose();
// Clean up
codecs.Dispose();
// Save this DIB to disk as a BMP file
int dibSize = GlobalSize(hdib).ToInt32();
BITMAPFILEHEADER bmfh = new BITMAPFILEHEADER();
bmfh.bfType = 0x4d42; // "BM"
bmfh.bfSize = (uint)(Marshal.SizeOf(typeof(BITMAPFILEHEADER)) + dibSize);
bmfh.bfReserved1 = 0;
bmfh.bfReserved2 = 0;
IntPtr pdib = GlobalLock(hdib);
BITMAPINFOHEADER bmih = new BITMAPINFOHEADER();
Marshal.PtrToStructure(pdib, bmih);
bmfh.bfOffBits = (uint)(Marshal.SizeOf(typeof(BITMAPFILEHEADER)) + bmih.biSize + bmih.biClrUsed * Marshal.SizeOf(typeof(RGBQUAD)));
using (FileStream fs = File.Create(Path.Combine(ImagesPath.Path, "Image1_ToDib.bmp")))
{
BinaryWriter writer = new BinaryWriter(fs);
writer.Write(bmfh.bfType);
writer.Write(bmfh.bfSize);
writer.Write(bmfh.bfReserved1);
writer.Write(bmfh.bfReserved2);
writer.Write(bmfh.bfOffBits);
byte[] buffer = new byte[1024];
int offset = 0;
while (offset < dibSize)
{
int bytes = Math.Min(dibSize - offset, buffer.Length);
Marshal.Copy(new IntPtr(pdib.ToInt64() + offset), buffer, 0, bytes);
fs.Write(buffer, 0, bytes);
offset += bytes;
}
}
GlobalUnlock(hdib);
GlobalFree(hdib);
}
Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.ImageProcessing
Imports Leadtools.ImageProcessing.Core
Imports Leadtools.ImageProcessing.Color
Imports Leadtools.Controls
Imports Leadtools.Dicom
Imports Leadtools.Drawing
Imports Leadtools.Svg
<DllImport("Kernel32", CharSet:=CharSet.Auto)>
Shared Function GlobalSize(ByVal hMem As IntPtr) As IntPtr
End Function
<DllImport("Kernel32", CharSet:=CharSet.Auto)>
Shared Function GlobalLock(ByVal hMem As IntPtr) As IntPtr
End Function
<DllImport("Kernel32", CharSet:=CharSet.Auto)>
Shared Function GlobalUnlock(ByVal hMem As IntPtr) As Integer
End Function
<DllImport("Kernel32", CharSet:=CharSet.Auto)>
Shared Function GlobalFree(ByVal hMem As IntPtr) As IntPtr
End Function
<StructLayout(LayoutKind.Sequential, Pack:=1)>
Class BITMAPFILEHEADER
Public bfType As UShort
Public bfSize As UInteger
Public bfReserved1 As UShort
Public bfReserved2 As UShort
Public bfOffBits As UInteger
End Class
<StructLayout(LayoutKind.Sequential, Pack:=1)>
Class BITMAPINFOHEADER
Public biSize As UInteger
Public biWidth As Integer
Public biHeight As Integer
Public biPlanes As UShort
Public biBitCount As UShort
Public biCompression As UInteger
Public biSizeImage As UInteger
Public biXPelsPerMeter As Integer
Public biYPelsPerMeter As Integer
Public biClrUsed As UInteger
Public biClrImportant As UInteger
End Class
<StructLayout(LayoutKind.Sequential, Pack:=1)>
Class RGBQUAD
Public rgbBlue As Byte
Public rgbGreen As Byte
Public rgbRed As Byte
Public rgbReserved As Byte
End Class
Public Sub ChangeToDibExample()
Dim codecs As New RasterCodecs()
' Load an image
Dim image As RasterImage = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "Image1.cmp"), 24, CodecsLoadByteOrder.BgrOrGray, 1, 1)
' Change to DIB
Dim hdib As IntPtr = image.ChangeToDib(RasterConvertToDibType.BitmapInfoHeader)
' Dispose the image since it is unusable now
image.Dispose()
' Clean up
codecs.Dispose()
' Save this DIB to disk as a BMP file
Dim dibSize As Integer = GlobalSize(hdib).ToInt32()
Dim bmfh As New BITMAPFILEHEADER()
bmfh.bfType = &H4D42 ' "BM"
bmfh.bfSize = CUInt(Marshal.SizeOf(GetType(BITMAPFILEHEADER)) + dibSize)
bmfh.bfReserved1 = 0
bmfh.bfReserved2 = 0
Dim pdib As IntPtr = GlobalLock(hdib)
Dim bmih As New BITMAPINFOHEADER()
Marshal.PtrToStructure(pdib, bmih)
bmfh.bfOffBits = CUInt(Marshal.SizeOf(GetType(BITMAPFILEHEADER)) + bmih.biSize + bmih.biClrUsed * Marshal.SizeOf(GetType(RGBQUAD)))
Using fs As FileStream = File.Create(Path.Combine(LEAD_VARS.ImagesDir, "Image1_ToDib.bmp"))
Dim writer As New BinaryWriter(fs)
writer.Write(bmfh.bfType)
writer.Write(bmfh.bfSize)
writer.Write(bmfh.bfReserved1)
writer.Write(bmfh.bfReserved2)
writer.Write(bmfh.bfOffBits)
Dim buffer(1023) As Byte
Dim offset As Integer = 0
While (offset < dibSize)
Dim bytes As Integer = Math.Min(dibSize - offset, buffer.Length)
Marshal.Copy(New IntPtr(pdib.ToInt64() + offset), buffer, 0, bytes)
fs.Write(buffer, 0, bytes)
offset = offset + bytes
End While
End Using
GlobalUnlock(hdib)
GlobalFree(hdib)
End Sub
Public NotInheritable Class LEAD_VARS
Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images"
End Class
RasterImageConverter.FromHBitmap
RasterImageConverter.ToHBitmap
Products |
Support |
Feedback: ChangeToDib Method - Leadtools |
Introduction |
Help Version 19.0.2017.6.19
|
Raster .NET | C API | C++ Class Library | JavaScript HTML5
Document .NET | C API | C++ Class Library | JavaScript HTML5
Medical .NET | C API | C++ Class Library | JavaScript HTML5
Medical Web Viewer .NET
Your email has been sent to support! Someone should be in touch! If your matter is urgent please come back into chat.
Chat Hours:
Monday - Friday, 8:30am to 6pm ET
Thank you for your feedback!
Please fill out the form again to start a new chat.
All agents are currently offline.
Chat Hours:
Monday - Friday
8:30AM - 6PM EST
To contact us please fill out this form and we will contact you via email.