public static UnmanagedImage FromManagedImage( BitmapData imageData )
{
PixelFormat pixelFormat = imageData.PixelFormat;
// check source pixel format
if (
( pixelFormat != PixelFormat.Format8bppIndexed ) &&
( pixelFormat != PixelFormat.Format16bppGrayScale ) &&
( pixelFormat != PixelFormat.Format24bppRgb ) &&
( pixelFormat != PixelFormat.Format32bppRgb ) &&
( pixelFormat != PixelFormat.Format32bppArgb ) &&
( pixelFormat != PixelFormat.Format32bppPArgb ) &&
( pixelFormat != PixelFormat.Format48bppRgb ) &&
( pixelFormat != PixelFormat.Format64bppArgb ) &&
( pixelFormat != PixelFormat.Format64bppPArgb ) )
{
throw new UnsupportedImageFormatException( "Unsupported pixel format of the source image." );
}
// allocate memory for the image
IntPtr dstImageData = System.Runtime.InteropServices.Marshal.AllocHGlobal( imageData.Stride * imageData.Height );
UnmanagedImage image = new UnmanagedImage( dstImageData, imageData.Width, imageData.Height, imageData.Stride, pixelFormat );
AForge.SystemTools.CopyUnmanagedMemory( dstImageData, imageData.Scan0, imageData.Stride * imageData.Height );
image.mustBeDisposed = true;
return image;
}