Skip to content

Commit

Permalink
Updated Bitmap header (#565)
Browse files Browse the repository at this point in the history
* Updated Bitmap header

Updated the Bitmap header to BITMAPINFOHEADER according to https://en.wikipedia.org/wiki/BMP_file_format#DIB_header_(bitmap_information_header)

Slightly improved, now with bitmap size in header. Updating the header was necessary as inserting the previous version inside a PDF document wasn't possible.

* Fixed formatting (dotnet format checks)

---------

Co-authored-by: Raffael Herrmann <[email protected]>
  • Loading branch information
Apflkuacha and codebude authored Jun 22, 2024
1 parent 81fad40 commit fc48785
Showing 1 changed file with 12 additions and 5 deletions.
17 changes: 12 additions & 5 deletions QRCoder/BitmapByteQRCode.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public byte[] GetGraphic(int pixelsPerModule, byte[] darkColorRgb, byte[] lightC
var bmp = new List<byte>();

//header
bmp.AddRange(new byte[] { 0x42, 0x4D, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00 });
bmp.AddRange(new byte[] { 0x42, 0x4D, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00 });

//width
bmp.AddRange(IntTo4Byte(sideLength));
Expand All @@ -68,6 +68,7 @@ public byte[] GetGraphic(int pixelsPerModule, byte[] darkColorRgb, byte[] lightC

//header end
bmp.AddRange(new byte[] { 0x01, 0x00, 0x18, 0x00 });
bmp.AddRange(new byte[24]);

//draw qr code
for (var x = sideLength - 1; x >= 0; x -= pixelsPerModule)
Expand All @@ -93,12 +94,16 @@ public byte[] GetGraphic(int pixelsPerModule, byte[] darkColorRgb, byte[] lightC
}
}

//finalize with terminator
bmp.AddRange(new byte[] { 0x00, 0x00 });

// write filesize in header
var bmpFileSize = IntTo4Byte(bmp.Count);
for (int i = 0; i < bmpFileSize.Length; i++)
{
bmp[2 + i] = bmpFileSize[i];
}
return bmp.ToArray();
}


/// <summary>
/// Converts a hex color string to a byte array.
/// </summary>
Expand All @@ -121,9 +126,11 @@ private byte[] HexColorToByteArray(string colorString)
/// <returns>Returns the integer as a 4-byte array.</returns>
private byte[] IntTo4Byte(int inp)
{
byte[] bytes = new byte[2];
byte[] bytes = new byte[4];
unchecked
{
bytes[3] = (byte)(inp >> 24);
bytes[2] = (byte)(inp >> 16);
bytes[1] = (byte)(inp >> 8);
bytes[0] = (byte)(inp);
}
Expand Down

0 comments on commit fc48785

Please sign in to comment.