public CV2Reader(Stream input) { if (input.Length < 17) { throw new IOException("ファイルが小さすぎます"); } _header = CV2Header.Deserialize(input); if (_header.Height * _header.PaddedWidth * _header.Bpp > input.Length - 17) { throw new IOException("ファイルが小さすぎます"); } input.Seek(17, SeekOrigin.Begin); _image = new Bitmap(_header.Width, _header.Height, _header.PixelFormat); int lineSize = _header.Width * _header.Bpp; byte[] lineBuf = new byte[_header.PaddedWidth * _header.Bpp]; for (int y = 0; y < _header.Height; ++y) { input.Read(lineBuf, 0, lineBuf.Length); BitmapData data = _image.LockBits( new Rectangle(0, y, _header.Width, 1), ImageLockMode.WriteOnly, _header.PixelFormat); Marshal.Copy(lineBuf, 0, data.Scan0, lineSize); _image.UnlockBits(data); } }
public static CV2Header Deserialize(Stream input) { CV2Header header = new CV2Header(); Binary reader = new Binary(input); header.bpp = reader.ReadByte(); header.Width = reader.ReadInt32(); header.Height = reader.ReadInt32(); header.PaddedWidth = reader.ReadInt32(); int resd1 = reader.ReadInt32(); if (header.PaddedWidth < header.Width) { throw new FormatException("ヘッダーが不正です。"); } return(header); }
public CV2Reader(Stream input) { if (input.Length < 17) throw new IOException("ファイルが小さすぎます"); _header = CV2Header.Deserialize(input); if (_header.Height * _header.PaddedWidth * _header.Bpp > input.Length - 17) throw new IOException("ファイルが小さすぎます"); input.Seek(17, SeekOrigin.Begin); _image = new Bitmap(_header.Width, _header.Height, _header.PixelFormat); int lineSize = _header.Width * _header.Bpp; byte[] lineBuf = new byte[_header.PaddedWidth * _header.Bpp]; for (int y = 0; y < _header.Height; ++y) { input.Read(lineBuf, 0, lineBuf.Length); BitmapData data = _image.LockBits( new Rectangle(0, y, _header.Width, 1), ImageLockMode.WriteOnly, _header.PixelFormat); Marshal.Copy(lineBuf, 0, data.Scan0, lineSize); _image.UnlockBits(data); } }
public static CV2Header Deserialize(Stream input) { CV2Header header = new CV2Header(); Binary reader = new Binary(input); header.bpp = reader.ReadByte(); header.Width = reader.ReadInt32(); header.Height = reader.ReadInt32(); header.PaddedWidth = reader.ReadInt32(); int resd1 = reader.ReadInt32(); if (header.PaddedWidth < header.Width) throw new FormatException("ヘッダーが不正です。"); return header; }