// Created by Joshua Flanagan // http://flimflan.com/blog // May 2004 // // You may freely use this code as you wish, I only ask that you retain my name in the source code using System; using System.IO; namespace FlimFlan.IconEncoder { /// /// Provides an in-memory representation of the device independent bitmap format /// /// /// Based on documentation at http://www.whisqu.se/per/docs/graphics52.htm /// public class BitmapHolder { public BITMAPFILEHEADER fileHeader; public BITMAPINFO info; public byte[] imageData; public void Open(string filename) { this.Open(File.OpenRead(filename)); } public void Open(Stream stream) { using (BinaryReader br = new BinaryReader(stream)) { fileHeader.Populate(br); info.Populate(br); if (info.infoHeader.biSizeImage > 0) { imageData = br.ReadBytes((int)info.infoHeader.biSizeImage); } else { // can be 0 if the bitmap is in the BI_RGB format // in which case you just read all of the remaining data imageData = br.ReadBytes((int)(br.BaseStream.Length - br.BaseStream.Position)); } } } public void Save(string filename) { this.Save(File.OpenWrite(filename)); } public void Save(Stream stream) { using (BinaryWriter bw = new BinaryWriter(stream)) { fileHeader.Save(bw); info.Save(bw); bw.Write(imageData); } } } }