// 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://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwui/html/msdn_icons.asp
///
public class IconHolder
{
public ICONDIR iconDirectory;
public ICONIMAGE[] iconImages;
public IconHolder()
{
iconDirectory.Reserved = 0;
iconDirectory.ResourceType = 1;
iconDirectory.EntryCount = 1;
iconImages = new ICONIMAGE[]{new ICONIMAGE()};
}
public void Open(string filename)
{
this.Open(File.OpenRead(filename));
}
public void Open(Stream stream)
{
using (BinaryReader br = new BinaryReader(stream))
{
iconDirectory.Populate(br);
iconImages = new ICONIMAGE[iconDirectory.EntryCount];
// Loop through and read in each image
for(int i=0; i < iconImages.Length; i++)
{
// Seek to the location in the file that has the image
// SetFilePointer( hFile, pIconDir->idEntries[i].dwImageOffset, NULL, FILE_BEGIN );
br.BaseStream.Seek(iconDirectory.Entries[i].ImageOffset, SeekOrigin.Begin);
// Read the image data
// ReadFile( hFile, pIconImage, pIconDir->idEntries[i].dwBytesInRes, &dwBytesRead, NULL );
// Here, pIconImage is an ICONIMAGE structure. Party on it :)
iconImages[i] = new ICONIMAGE();
iconImages[i].Populate(br);
}
}
}
public void Save(string filename)
{
using (BinaryWriter bw = new BinaryWriter(File.OpenWrite(filename)))
{
this.Save(bw);
}
}
public void Save(BinaryWriter bw)
{
iconDirectory.Save(bw);
for(int i=0; i