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);
 }
Exemple #2
0
 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);
 }