示例#1
0
 private static void WriteHeader(EndianBinaryWriter writer, BmpFileHeader fileHeader)
 {
     writer.Write(fileHeader.Type);
     writer.Write(fileHeader.FileSize);
     writer.Write(fileHeader.Reserved);
     writer.Write(fileHeader.Offset);
 }
示例#2
0
 private static void WriteHeader(EndianBinaryWriter writer, BmpFileHeader fileHeader)
 {
     writer.Write(fileHeader.Type);
     writer.Write(fileHeader.FileSize);
     writer.Write(fileHeader.Reserved);
     writer.Write(fileHeader.Offset);
 }
示例#3
0
 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)
     };
 }
示例#4
0
        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();
        }
示例#5
0
        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();
        }