Browse Source

Make BmpFileHeader readonly

af/merge-core
Jason Nelson 8 years ago
parent
commit
a12c7c06d5
  1. 13
      src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs
  2. 18
      src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs
  3. 28
      src/ImageSharp/Formats/Bmp/BmpFileHeader.cs

13
src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs

@ -581,13 +581,12 @@ namespace SixLabors.ImageSharp.Formats.Bmp
this.currentStream.Read(data, 0, BmpFileHeader.Size); this.currentStream.Read(data, 0, BmpFileHeader.Size);
this.fileHeader = new BmpFileHeader this.fileHeader = new BmpFileHeader(
{ type: BitConverter.ToInt16(data, 0),
Type = BitConverter.ToInt16(data, 0), fileSize: BitConverter.ToInt32(data, 2),
FileSize = BitConverter.ToInt32(data, 2), reserved: BitConverter.ToInt32(data, 6),
Reserved = BitConverter.ToInt32(data, 6), offset: BitConverter.ToInt32(data, 10)
Offset = BitConverter.ToInt32(data, 10) );
};
} }
/// <summary> /// <summary>

18
src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs

@ -55,9 +55,9 @@ namespace SixLabors.ImageSharp.Formats.Bmp
this.padding = bytesPerLine - (image.Width * (int)this.bitsPerPixel); this.padding = bytesPerLine - (image.Width * (int)this.bitsPerPixel);
// Do not use IDisposable pattern here as we want to preserve the stream. // Do not use IDisposable pattern here as we want to preserve the stream.
EndianBinaryWriter writer = new EndianBinaryWriter(Endianness.LittleEndian, stream); var writer = new EndianBinaryWriter(Endianness.LittleEndian, stream);
BmpInfoHeader infoHeader = new BmpInfoHeader var infoHeader = new BmpInfoHeader
{ {
HeaderSize = BmpInfoHeader.BitmapInfoHeaderSize, HeaderSize = BmpInfoHeader.BitmapInfoHeaderSize,
Height = image.Height, Height = image.Height,
@ -69,12 +69,12 @@ namespace SixLabors.ImageSharp.Formats.Bmp
ClrImportant = 0 ClrImportant = 0
}; };
BmpFileHeader fileHeader = new BmpFileHeader var fileHeader = new BmpFileHeader(
{ type: 19778, // BM
Type = 19778, // BM offset: 54,
Offset = 54, reserved: 0,
FileSize = 54 + infoHeader.ImageSize fileSize: 54 + infoHeader.ImageSize
}; );
WriteHeader(writer, fileHeader); WriteHeader(writer, fileHeader);
this.WriteInfo(writer, infoHeader); this.WriteInfo(writer, infoHeader);
@ -92,7 +92,7 @@ namespace SixLabors.ImageSharp.Formats.Bmp
/// <param name="fileHeader"> /// <param name="fileHeader">
/// The <see cref="BmpFileHeader"/> containing the header data. /// The <see cref="BmpFileHeader"/> containing the header data.
/// </param> /// </param>
private static void WriteHeader(EndianBinaryWriter writer, BmpFileHeader fileHeader) private static void WriteHeader(EndianBinaryWriter writer, in BmpFileHeader fileHeader)
{ {
writer.Write(fileHeader.Type); writer.Write(fileHeader.Type);
writer.Write(fileHeader.FileSize); writer.Write(fileHeader.FileSize);

28
src/ImageSharp/Formats/Bmp/BmpFileHeader.cs

@ -13,35 +13,43 @@ namespace SixLabors.ImageSharp.Formats.Bmp
/// All of the other integer values are stored in little-endian format /// All of the other integer values are stored in little-endian format
/// (i.e. least-significant byte first). /// (i.e. least-significant byte first).
/// </remarks> /// </remarks>
internal sealed class BmpFileHeader internal readonly struct BmpFileHeader
{ {
/// <summary> /// <summary>
/// Defines of the data structure in the bitmap file. /// Defines of the data structure in the bitmap file.
/// </summary> /// </summary>
public const int Size = 14; public const int Size = 14;
public BmpFileHeader(short type, int fileSize, int reserved, int offset)
{
this.Type = type;
this.FileSize = fileSize;
this.Reserved = reserved;
this.Offset = offset;
}
/// <summary> /// <summary>
/// Gets or sets the Bitmap identifier. /// Gets the Bitmap identifier.
/// The field used to identify the bitmap file: 0x42 0x4D /// The field used to identify the bitmap file: 0x42 0x4D
/// (Hex code points for B and M) /// (Hex code points for B and M)
/// </summary> /// </summary>
public short Type { get; set; } public short Type { get; }
/// <summary> /// <summary>
/// Gets or sets the size of the bitmap file in bytes. /// Gets the size of the bitmap file in bytes.
/// </summary> /// </summary>
public int FileSize { get; set; } public int FileSize { get; }
/// <summary> /// <summary>
/// Gets or sets any reserved data; actual value depends on the application /// Gets any reserved data; actual value depends on the application
/// that creates the image. /// that creates the image.
/// </summary> /// </summary>
public int Reserved { get; set; } public int Reserved { get; }
/// <summary> /// <summary>
/// Gets or sets the offset, i.e. starting address, of the byte where /// Gets the offset, i.e. starting address, of the byte where
/// the bitmap data can be found. /// the bitmap data can be found.
/// </summary> /// </summary>
public int Offset { get; set; } public int Offset { get; }
} }
} }
Loading…
Cancel
Save