Hash From Bitmap

Bitmap Pixel Access

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