private void WriteInfo(EndianBinaryWriter writer, BmpInfoHeader infoHeader) { writer.Write(infoHeader.HeaderSize); writer.Write(infoHeader.Width); writer.Write(infoHeader.Height); writer.Write(infoHeader.Planes); writer.Write(infoHeader.BitsPerPixel); writer.Write((int)infoHeader.Compression); writer.Write(infoHeader.ImageSize); writer.Write(infoHeader.XPelsPerMeter); writer.Write(infoHeader.YPelsPerMeter); writer.Write(infoHeader.ClrUsed); writer.Write(infoHeader.ClrImportant); }
private void ReadInfoHeader() { byte[] data = new byte[BmpInfoHeader.size]; currentStream.Read(data, 0, BmpInfoHeader.size); infoHeader = new BmpInfoHeader { HeaderSize = BitConverter.ToInt32(data, 0), Width = BitConverter.ToInt32(data, 4), Height = BitConverter.ToInt32(data, 8), Planes = BitConverter.ToInt16(data, 12), BitsPerPixel = BitConverter.ToInt16(data, 14), ImageSize = BitConverter.ToInt32(data, 20), XPelsPerMeter = BitConverter.ToInt32(data, 24), YPelsPerMeter = BitConverter.ToInt32(data, 28), ClrUsed = BitConverter.ToInt32(data, 32), ClrImportant = BitConverter.ToInt32(data, 36), Compression = (BmpCompression)BitConverter.ToInt32(data, 16) }; }
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(); }
private void WriteInfo(EndianBinaryWriter writer, BmpInfoHeader infoHeader) { writer.Write(infoHeader.HeaderSize); writer.Write(infoHeader.Width); writer.Write(infoHeader.Height); writer.Write(infoHeader.Planes); writer.Write(infoHeader.BitsPerPixel); writer.Write((int) infoHeader.Compression); writer.Write(infoHeader.ImageSize); writer.Write(infoHeader.XPelsPerMeter); writer.Write(infoHeader.YPelsPerMeter); writer.Write(infoHeader.ClrUsed); writer.Write(infoHeader.ClrImportant); }