Icons

Create a raw icon 16 x 16 pixel 16 colors

internal static readonly byte[] Favicon = new byte[]
{
    // ICONDIR
    0x00, 0x00, // Reserved. Must always be 0.
    0x01, 0x00, // Specifies image type: 1 for icon (.ICO) image, 2 for cursor (.CUR) image. Other values are invalid.
    0x01, 0x00, // Specifies number of images in the file. (Count)

    // ICONDIRENTRY
    0x10, // Specifies image width in pixels. Can be any number between 0 and 255. Value 0 means image width is 256 pixels.
    0x10, // Specifies image height in pixels. Can be any number between 0 and 255. Value 0 means image height is 256 pixels.
    0x10, // Specifies number of colors in the color palette. Should be 0 if the image does not use a color palette. (ColorCount)
    0x00, // Reserved. Should be 0.
    0x00, 0x00, // Specifies color planes. Should be 0 or 1.
    0x00, 0x00, // Specifies bits per pixel. (BitCount)
    0x28, 0x01, 0x00, 0x00, // Specifies the size of the image's data in bytes
    0x16, 0x00, 0x00, 0x00, // Specifies the offset of BMP or PNG data from the beginning of the ICO/CUR file

    // Count * BITMAPINFOHEADER (40 bytes)
    0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
    0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00,
    0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

    // ColorCount * RGBA (4 bytes)
    0x00, 0x00, 0x00, 0x00, // 0
    0x00, 0x00, 0x80, 0x00, 
    0x00, 0x80, 0x00, 0x00,
    0x00, 0x80, 0x80, 0x00,
    0x80, 0x00, 0x00, 0x00,
    0x80, 0x00, 0x80, 0x00,
    0x80, 0x80, 0x00, 0x00,
    0x80, 0x80, 0x80, 0x00,
    0xC0, 0xC0, 0xC0, 0x00, // 8
    0x00, 0x00, 0xFF, 0x00,
    0x00, 0xFF, 0x00, 0x00,
    0x00, 0xFF, 0xFF, 0x00,
    0xFF, 0x00, 0x00, 0x00,
    0xFF, 0x00, 0xFF, 0x00,
    0xFF, 0xFF, 0x00, 0x00,
    0xFF, 0xFF, 0xFF, 0x00,

    // ColorCount * XORBitmap
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0
    0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xC0, 0x00, 
    0x0C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 
    0x0C, 0xF9, 0x99, 0x99, 0x99, 0x99, 0xFC, 0x00,
    0x0C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
    0x0C, 0xFC, 0xCC, 0xCC, 0xCC, 0xCC, 0xFC, 0x00,
    0x0C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
    0x0C, 0xF9, 0x9F, 0xFF, 0x9F, 0xF9, 0xFC, 0x00,
    0x0C, 0xF9, 0xFF, 0xFF, 0x9F, 0xF9, 0xFC, 0x00, // 8
    0x0C, 0xF9, 0x9F, 0x99, 0x9F, 0xF9, 0xFC, 0x00,
    0x0C, 0xFF, 0x9F, 0x9F, 0x9F, 0xF9, 0xFC, 0x00,
    0x0C, 0xF9, 0x9F, 0x9F, 0x9F, 0x99, 0xFC, 0x00,
    0x0C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
    0x0C, 0xFC, 0xCC, 0xCC, 0xCC, 0xCC, 0xFC, 0x00,
    0x0C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
    0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xC0, 0x00,

    // ColorCount * ANDBitmap
    0xE0, 0x03, 0x00, 0x00, // 0
    0xC0, 0x01, 0x00, 0x00,
    0x80, 0x01, 0x00, 0x00,
    0x80, 0x01, 0x00, 0x00,
    0x80, 0x01, 0x00, 0x00,
    0x80, 0x01, 0x00, 0x00,
    0x80, 0x01, 0x00, 0x00, 
    0x80, 0x01, 0x00, 0x00,
    0x80, 0x01, 0x00, 0x00, // 8
    0x80, 0x01, 0x00, 0x00,
    0x80, 0x01, 0x00, 0x00,
    0x80, 0x01, 0x00, 0x00,
    0x80, 0x01, 0x00, 0x00,
    0x80, 0x01, 0x00, 0x00,
    0x80, 0x03, 0x00, 0x00,
    0xC0, 0x07, 0x00, 0x00
};

Use it in a HttpHandler

public void ProcessRequest(HttpContext context)
{
    var response = context.Response;
    response.ContentType = "image/x-icon";
    var cacheTime = TimeSpan.FromMinutes(10.0);
    response.Cache.SetExpires(DateTime.Now.Add(cacheTime));
    response.Cache.SetMaxAge(cacheTime);
    response.Cache.SetCacheability(HttpCacheability.Public);
    response.Cache.SetValidUntilExpires(true);
    response.OutputStream.Write(Favicon, 0, Favicon.Length);
}
Hyrtwol, Version 1.1.0.45 · Repertoire, Version 1.1.51.82 · View markdown source