コード例 #1
0
ファイル: VbpSupport.cs プロジェクト: Orvid/Cosmos
 static Image ReadBitmapData(Stream input, VbpFileHeader fileHeader, VbpInformationHeader infoHeader)
 {
     input.Position = fileHeader.OffBits;
     int count = (infoHeader.Width * infoHeader.Height) * 2;
     byte[] buffer = new byte[count];
     input.Read(buffer, 0, count);
     Image bitmap = new Image(infoHeader.Width, infoHeader.Height);
     int shift = GetShift(infoHeader.ColorMask.R);
     int num3 = GetShift(infoHeader.ColorMask.G);
     int num4 = GetShift(infoHeader.ColorMask.B);
     int num5 = 0;
     for (int i = 0; i < infoHeader.Height; i++)
     {
         for (int j = 0; j < infoHeader.Width; j++)
         {
             ushort num8 = BitConverter.ToUInt16(buffer, num5++ * 2);
             ushort red = (ushort)_colorTable5Bit[(num8 & infoHeader.ColorMask.R) >> shift];
             ushort green = (ushort)_colorTable5Bit[(num8 & infoHeader.ColorMask.G) >> num3];
             ushort blue = (ushort)_colorTable5Bit[(num8 & infoHeader.ColorMask.B) >> num4];
             Pixel color = new Pixel((byte)red, (byte)green, (byte)blue, 255);
             bitmap.SetPixel((uint)j, (uint)i, color);
         }
     }
     return bitmap;
 }
コード例 #2
0
            static Image ReadBitmapData(Stream input, VbpFileHeader fileHeader, VbpInformationHeader infoHeader)
            {
                input.Position = fileHeader.OffBits;
                int count = (infoHeader.Width * infoHeader.Height) * 2;

                byte[] buffer = new byte[count];
                input.Read(buffer, 0, count);
                Image bitmap = new Image(infoHeader.Width, infoHeader.Height);
                int   shift  = GetShift(infoHeader.ColorMask.R);
                int   num3   = GetShift(infoHeader.ColorMask.G);
                int   num4   = GetShift(infoHeader.ColorMask.B);
                int   num5   = 0;

                for (int i = 0; i < infoHeader.Height; i++)
                {
                    for (int j = 0; j < infoHeader.Width; j++)
                    {
                        ushort num8  = BitConverter.ToUInt16(buffer, num5++ *2);
                        ushort red   = (ushort)_colorTable5Bit[(num8 & infoHeader.ColorMask.R) >> shift];
                        ushort green = (ushort)_colorTable5Bit[(num8 & infoHeader.ColorMask.G) >> num3];
                        ushort blue  = (ushort)_colorTable5Bit[(num8 & infoHeader.ColorMask.B) >> num4];
                        Pixel  color = new Pixel((byte)red, (byte)green, (byte)blue, 255);
                        bitmap.SetPixel((uint)j, (uint)i, color);
                    }
                }
                return(bitmap);
            }
コード例 #3
0
            public static Image ReadBitmap(Stream input)
            {
                Image                i          = new Image(160, 120);
                VbpFileHeader        fileHeader = ReadFileHeader(input);
                VbpInformationHeader infoHeader = ReadInfoHeader(input);

                if (infoHeader.Compression == IH_Compression.BI_BITFIELDS)
                {
                    i = ReadBitmapData(input, fileHeader, infoHeader);
                }
                return(i);
            }
コード例 #4
0
            static VbpFileHeader ReadFileHeader(Stream input)
            {
                input.Position = 0L;
                byte[] buffer = new byte[14];
                input.Read(buffer, 0, 14);
                VbpFileHeader header = new VbpFileHeader();

                header.Type = new char[] { (char)buffer[0], (char)buffer[1] };
                if ((header.Type[0] != 'B') || (header.Type[1] != 'M'))
                {
                    throw new Exception("Wrong Filetype!");
                }
                header.Size     = BitConverter.ToUInt32(buffer, 2);
                header.Reserved = BitConverter.ToUInt32(buffer, 6);
                header.OffBits  = BitConverter.ToUInt32(buffer, 10);
                return(header);
            }
コード例 #5
0
ファイル: VbpSupport.cs プロジェクト: Orvid/Cosmos
 static VbpFileHeader ReadFileHeader(Stream input)
 {
     input.Position = 0L;
     byte[] buffer = new byte[14];
     input.Read(buffer, 0, 14);
     VbpFileHeader header = new VbpFileHeader
     {
         Type = new char[] { (char)buffer[0], (char)buffer[1] }
     };
     if ((header.Type[0] != 'B') || (header.Type[1] != 'M'))
     {
         throw new Exception("Wrong Filetype!");
     }
     header.Size = BitConverter.ToUInt32(buffer, 2);
     header.Reserved = BitConverter.ToUInt32(buffer, 6);
     header.OffBits = BitConverter.ToUInt32(buffer, 10);
     return header;
 }