←Select platform

ChangeToDib Method

Summary
Changes a LEAD RasterImage object to a Windows Device Independent Bitmap (DIB).
Syntax
C#
C++/CLI
Python
public IntPtr ChangeToDib( 
   RasterConvertToDibType type 
) 
public: 
IntPtr ChangeToDib(  
   RasterConvertToDibType type 
)  
def ChangeToDib(self,type): 

Parameters

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)

Return Value

A handle to the device independent bitmap (DIB) this method creates.

Remarks

A DIB consists of one of the following:

  • a BITMAPFILEHEADER,
  • a BITMAPV4HEADER (introduced in Windows 95 and Windows NT 4.0),
  • or a BITMAPV5HEADER (introduced in Windows 2000 and Windows 98),

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.

Example

This example loads a RasterImage, changes it to a V5 DIB and writes out the DIB as a bitmap file.

C#
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 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(LEAD_VARS.ImagesDir, "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(LEAD_VARS.ImagesDir, "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); 
} 
 
static class LEAD_VARS 
{ 
   public const string ImagesDir = @"C:\LEADTOOLS23\Resources\Images"; 
} 
Requirements

Target Platforms

Help Version 23.0.2024.2.29
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2024 LEAD Technologies, Inc. All Rights Reserved.

Leadtools Assembly

Products | Support | Contact Us | Intellectual Property Notices
© 1991-2023 LEAD Technologies, Inc. All Rights Reserved.