Example #1
0
        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();
        }
Example #2
0
 private static void Write(BinaryWriter 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);
 }
Example #3
0
            private void ReadInfoHeader()
            {
                byte[] data = new byte[BmpInfoHeader.Size];

                _stream.Read(data, 0, BmpInfoHeader.Size);

                _infoHeader = new BmpInfoHeader();
                _infoHeader.HeaderSize = BitConverter.ToInt32(data, 0);
                _infoHeader.Width = BitConverter.ToInt32(data, 4);
                _infoHeader.Height = BitConverter.ToInt32(data, 8);
                _infoHeader.Planes = BitConverter.ToInt16(data, 12);
                _infoHeader.BitsPerPixel = BitConverter.ToInt16(data, 14);
                _infoHeader.ImageSize = BitConverter.ToInt32(data, 20);
                _infoHeader.XPelsPerMeter = BitConverter.ToInt32(data, 24);
                _infoHeader.YPelsPerMeter = BitConverter.ToInt32(data, 28);
                _infoHeader.ClrUsed = BitConverter.ToInt32(data, 32);
                _infoHeader.ClrImportant = BitConverter.ToInt32(data, 36);
                _infoHeader.Compression = (BmpCompression)BitConverter.ToInt32(data, 16);
            }