private static byte[] ConvertWritableBitmapToByteArray(WriteableBitmap bmp)
{
var result = new byte[56 + 4 * bmp.PixelWidth * bmp.PixelHeight];
// bitmap signature
result[0] = (byte)'B';
result[1] = (byte)'M';
// offset
result[10] = 56;
// header size
result[14] = 40;
// width of the image
SerializeIntoByteArray(bmp.PixelWidth, result, 18);
// width of the height
SerializeIntoByteArray(bmp.PixelHeight, result, 22);
// planes
result[26] = 1;
// bits per pixel
result[28] = 32;
// bitmap raw size, 4 bytes per pixel
var size = bmp.PixelHeight * bmp.PixelHeight * 4;
SerializeIntoByteArray(size, result, 34);
int idx = result.Length - 1;
for (int i = 0; i < bmp.PixelHeight; i++)
{
for (int j = 0; j < bmp.PixelWidth; j++)
{
var color = bmp.Pixels[i * bmp.PixelWidth + (bmp.PixelWidth - j - 1)];
SerializeIntoByteArray(color, result, idx - 3);
idx -= 4;
}
}
return result;
}
#endif