Hash From Bitmap
Demonstrates computing an MD5 hash from bitmap pixel data via unsafe pointer-based scanline access.
Сode Snippet
public static void Run()
{
using (var bitmap = new Bitmap("Chicago.jpg"))
{
if (bitmap.PixelFormat.IsIndexed)
{
bitmap.ColorManagement.Convert(PixelFormat.Format32bppArgb);
}
Console.WriteLine("MD5: {0}", GetMD5Hash(bitmap));
}
}
private static string GetMD5Hash(Bitmap bitmap)
{
int scanlineByteWidth = bitmap.Width * bitmap.PixelFormat.Size / 8;
using (var md5 = MD5.Create())
{
unsafe
{
byte* pScanline = (byte*)bitmap.Scan0.ToPointer();
var buffer = new byte[scanlineByteWidth];
for (int j = 0; j < bitmap.Height; ++j)
{
Marshal.Copy((IntPtr)pScanline, buffer, 0, scanlineByteWidth);
md5.TransformBlock(buffer, 0, scanlineByteWidth, buffer, 0);
pScanline += bitmap.Stride;
}
md5.TransformFinalBlock(new byte[0], 0, 0);
}
return string.Concat(Array.ConvertAll(md5.Hash, x => x.ToString("X2")));
}
}
Input
Chicago.jpg
Output
HashFromBitmap.txt
MD5: B619FED6867988392E08551AAA06BC53
For AI-assisted development: Download Graphics Mill Code Samples XML Catalog