public BigBitmap(string filePath) { if (!File.Exists(filePath)) { throw new Exception(); } FilePath = filePath; Mmf = MemoryMappedFile.CreateFromFile(filePath); MmfInfo = new FileInfo(filePath); if (MmfInfo.Length < VirtualSize) { VirtualSize = MmfInfo.Length; } // File.SetAttributes(filePath, FileAttributes.Normal); Reader = Mmf.CreateViewAccessor(Offset, VirtualSize); if (!Reader.CanRead) { throw new InvalidOperationException("File cannot be read"); } MemoryMappedPosition = 0; FileHeader = BigBitmapHeader.GetHeader(Reader, out MemoryMappedPosition); //MemoryMappedPostion = 22 FileInfoHeader = BigBitmapInfoHeader.GetInfoHeader(Reader, ref MemoryMappedPosition); //MemoryMappedPostion = 70 Initilize(); }
public static BigBitmapHeader GetHeader(MemoryMappedViewAccessor Reader, out int MMPosition) { MMPosition = 0; var header = new BigBitmapHeader(); header.Type = Encoding.ASCII.GetString(new byte[] { Reader.ReadByte(MMPosition) }); MMPosition++; header.Type += Encoding.ASCII.GetString(new byte[] { Reader.ReadByte(MMPosition) }); MMPosition++; header.FileSize = Reader.ReadInt64(MMPosition); MMPosition += 8; header.Reserved = Reader.ReadInt32(MMPosition); MMPosition += 4; header.Offset = Reader.ReadInt32(MMPosition); MMPosition += 4; header.BitmapInfoHeaderSize = Reader.ReadInt32(MMPosition); MMPosition += 4; return(header); }
private BigBitmap(MemoryMappedViewAccessor Accessor, BigBitmapHeader Header, BigBitmapInfoHeader Info, string filePath) { Reader = Accessor; FileHeader = Header; FileInfoHeader = Info; FilePath = filePath; Initilize(); }
public static BigBitmap CreateBigBitmap(string filePath, long Width, long Height, int HorizantalRes, int VerticalRes, byte BackGround_Red, byte BackGround_Green, byte BackGround_Blue) { if (Width * Height > long.MaxValue - 70) { throw new ArgumentOutOfRangeException("Width*Height", "Maximum file Size Exceeds Max INT64 Size, use lower Dimension Size or lower BPP (Which is not Supported YET!)"); } var rowSize = (long)Math.Floor(((24 * (double)Width) + 31) / 32) * 4; var padding = rowSize - Width * 3; BigBitmapHeader header = null; BigBitmapInfoHeader headerInfo = null; using (var fileStream = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite)) { header = new BigBitmapHeader() { FileSize = 70 + Height * ((Width * 3) + padding) }; var headerData = header.CreateBigBitmapHeader(); fileStream.Write(headerData, 0, headerData.Length); fileStream.Flush(); headerInfo = new BigBitmapInfoHeader() { BitmapHeight = Height, BitsPerPixel = 24, ColorPlanes = 1, BitmapWidth = Width, HorizantalResolution = HorizantalRes, VerticalResolution = VerticalRes }; headerData = headerInfo.CreateInfoHeaderData(Height * ((Width * 3) + padding)); fileStream.Write(headerData, 0, headerData.Length); var colorBytes = new byte[] { BackGround_Blue, BackGround_Green, BackGround_Red }; headerData = new byte[padding]; fileStream.Flush(); for (long i = 0; i < Height; i++) { for (long k = 0; k < Width; k++) { fileStream.Write(colorBytes, 0, colorBytes.Length); } //headerData = byte[padding] fileStream.Write(headerData, 0, headerData.Length); } fileStream.Flush(); fileStream.Close(); } return(new BigBitmap(MemoryMappedFile.CreateFromFile(filePath).CreateViewAccessor(), header, headerInfo, filePath)); }
public static BigBitmapHeader GetHeader(byte[] data) { var header = new BigBitmapHeader(); using (var s = new MemoryStream(data)) using (var reader = new BinaryReader(s)) { header.Type = Encoding.ASCII.GetString(data, 0, 2); s.Seek(2, SeekOrigin.Begin); header.FileSize = reader.ReadInt64(); header.Reserved = reader.ReadInt32(); header.Offset = reader.ReadInt32(); header.BitmapInfoHeaderSize = reader.ReadInt32(); } return(header); }