private static void WriteHeader(EndianBinaryWriter writer, BmpFileHeader fileHeader) { writer.Write(fileHeader.Type); writer.Write(fileHeader.FileSize); writer.Write(fileHeader.Reserved); writer.Write(fileHeader.Offset); }
private void ReadFileHeader() { byte[] data = new byte[BmpFileHeader.size]; currentStream.Read(data, 0, BmpFileHeader.size); fileHeader = new BmpFileHeader { Type = BitConverter.ToInt16(data, 0), FileSize = BitConverter.ToInt32(data, 2), Reserved = BitConverter.ToInt32(data, 6), Offset = BitConverter.ToInt32(data, 10) }; }
public void Encode(ImageBase image, Stream stream, BmpBitsPerPixel bitsPerPixel) { if (image == null || stream == null) { throw new ArgumentNullException(); } bmpBitsPerPixel = bitsPerPixel; int rowWidth = image.Width; // TODO: Check this for varying file formats. int amount = (image.Width * (int)bmpBitsPerPixel) % 4; if (amount != 0) { rowWidth += 4 - amount; } // Do not use IDisposable pattern here as we want to preserve the stream. EndianBinaryWriter writer = new EndianBinaryWriter(EndianBitConverter.Little, stream); int bpp = (int)bmpBitsPerPixel; BmpFileHeader fileHeader = new BmpFileHeader { Type = 19778, // BM Offset = 54, FileSize = 54 + image.Height * rowWidth * bpp }; BmpInfoHeader infoHeader = new BmpInfoHeader { HeaderSize = 40, Height = image.Height, Width = image.Width, BitsPerPixel = (short)(8 * bpp), Planes = 1, ImageSize = image.Height * rowWidth * bpp, ClrUsed = 0, ClrImportant = 0 }; WriteHeader(writer, fileHeader); WriteInfo(writer, infoHeader); WriteImage(writer, image); writer.Flush(); }
public void Encode(ImageBase image, Stream stream, BmpBitsPerPixel bitsPerPixel) { if (image == null || stream == null){ throw new ArgumentNullException(); } bmpBitsPerPixel = bitsPerPixel; int rowWidth = image.Width; // TODO: Check this for varying file formats. int amount = (image.Width*(int) bmpBitsPerPixel)%4; if (amount != 0){ rowWidth += 4 - amount; } // Do not use IDisposable pattern here as we want to preserve the stream. EndianBinaryWriter writer = new EndianBinaryWriter(EndianBitConverter.Little, stream); int bpp = (int) bmpBitsPerPixel; BmpFileHeader fileHeader = new BmpFileHeader{ Type = 19778, // BM Offset = 54, FileSize = 54 + image.Height*rowWidth*bpp }; BmpInfoHeader infoHeader = new BmpInfoHeader{ HeaderSize = 40, Height = image.Height, Width = image.Width, BitsPerPixel = (short) (8*bpp), Planes = 1, ImageSize = image.Height*rowWidth*bpp, ClrUsed = 0, ClrImportant = 0 }; WriteHeader(writer, fileHeader); WriteInfo(writer, infoHeader); WriteImage(writer, image); writer.Flush(); }