ChangeToDib Method (original) (raw)

Summary

Changes a LEAD RasterImage object to a Windows Device Independent Bitmap (DIB).

Example

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 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:\LEADTOOLS22\Resources\Images"; }

Leadtools Assembly

Convert(byte[],int,int,int,int,RasterByteOrder,RasterByteOrder,RasterColor[],RasterColor[],int,int,int,RasterConvertBufferFlags) Method

Convert(byte[],int,int,int,int,RasterByteOrder,RasterByteOrder,RasterColor[],RasterColor[],RasterColor16[],RasterColor16[],int,int,int,RasterConvertBufferFlags) Method

Convert(IntPtr,int,int,int,RasterByteOrder,RasterByteOrder,RasterColor[],RasterColor[],int,int,int,RasterConvertBufferFlags) Method

Convert(IntPtr,int,int,int,RasterByteOrder,RasterByteOrder,RasterColor[],RasterColor[],RasterColor16[],RasterColor16[],int,int,int,RasterConvertBufferFlags) Method