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; }
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); }
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); }
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); }
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; }