public void Encode(Image image, Stream stream) { int rowWidth = image.Width; int amount = (image.Width * 3) % 4; if (amount != 0) { rowWidth += 4 - amount; } BinaryWriter writer = new BinaryWriter(stream); BmpFileHeader fileHeader = new BmpFileHeader(); fileHeader.Type = 19778; fileHeader.Offset = 54; fileHeader.FileSize = 54 + image.Height * rowWidth * 3; Write(writer, fileHeader); BmpInfoHeader infoHeader = new BmpInfoHeader(); infoHeader.HeaderSize = 40; infoHeader.Height = image.Height; infoHeader.Width = image.Width; infoHeader.BitsPerPixel = 24; infoHeader.Planes = 1; infoHeader.Compression = BmpCompression.RGB; infoHeader.ImageSize = image.Height * rowWidth * 3; infoHeader.ClrUsed = 0; infoHeader.ClrImportant = 0; Write(writer, infoHeader); WriteImage(writer, image); writer.Flush(); }
private static void Write(BinaryWriter 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]; _stream.Read(data, 0, BmpFileHeader.Size); _fileHeader = new BmpFileHeader(); _fileHeader.Type = BitConverter.ToInt16(data, 0); _fileHeader.FileSize = BitConverter.ToInt32(data, 2); _fileHeader.Reserved = BitConverter.ToInt32(data, 6); _fileHeader.Offset = BitConverter.ToInt32(data, 10); }