private static byte[] BitsFromImage(string fileName) {
// Note, that .Net will convert png to BMP
using var bmp = new Bitmap(fileName);
var bmpData = bmp.LockBits(
new Rectangle(0, 0, bmp.Width, bmp.Height),
ImageLockMode.ReadOnly,
bmp.PixelFormat);
var bytes = bmpData.Stride * bmp.Height;
var rgbValues = new byte[bytes];
Marshal.Copy(bmpData.Scan0, rgbValues, 0, bytes);
// We want RGB oderorder, not deafultdefault BGR
for (var i = 0; i < bytes; i += 3)
(rgbValues[i], rgbValues[i + 1], rgbValues[i + 2]) =
(rgbValues[i + 2], rgbValues[i + 1], rgbValues[i]);
// We want LSBs only
for (var i = 0; i < bytes; ++i)
rgbValues[i] = (byte)(rgbValues[i] & 1);
return rgbValues;
}
// Put the right file name here
using var image = ImageToBmp(@"C:\Image2.png");
image.Save(@"C:\Solution.bmp");