NAME¶
ico - Reading and writing windows icons
SYNOPSIS¶
package require
Tcl 8.4
package require
ico ?1.0?
::ico::icons file ?
option value...?
::ico::iconMembers file name ?
option
value...?
::ico::getIcon file name ?
option value...?
::ico::getIconByName file name ?
option
value...?
::ico::getFileIcon file ?
option value...?
::ico::writeIcon file name depth data
?
option value...?
::ico::copyIcon file index file2 index2
?
option value...?
::ico::EXEtoICO file ?dir?
::ico::clearCache ?file?
::ico::transparentColor image color
::ico::Show file ?
option value...?
DESCRIPTION¶
This package provides functions for reading and writing Windows icons from ICO,
EXE, DLL, ICL, and BMP files. As used in this module an icon is a visual
representation of an object. An icon consists of one or more images usually
with varying resolution and color depth. Each icon and image has a resource
identifier which may be a text string or a positive integer value. Most
commands use this identifier to specify which icon or image to operate on.
API¶
- ::ico::icons file ?option
value...?
- Returns a list of icons found in file where each
element is the name or numeric ID. Recognizes the following options:
- ::ico::iconMembers file name
?option value...?
- Returns a list of images that make up the icon with ID
name. Each element is itself a sublist in the format {name width
height bpp}. Recognizes the following options:
- ::ico::getIcon file name
?option value...?
- Extracts the icon with ID name from file. The
default -format is image which will return the name of a Tk
image containing the icon. The resolution and color depth are selected
with the ?-res?, ?-bpp?, and ?-exact? options. If -exact is specified and
there is no exact match, an error is thrown. Optionally -image may
be used to specify the name of the Tk image that is created. If
-format is colors then a list of color names in the #RRGGBB
format is returned. Each list element is a horizontal row. Each horizontal
row contains a list of colors for all the pixels in that row from left to
right. If -format is name then the resource name of the
image chosen is returned. This is useful for calling writeIcon or
getIconByName. Recognizes the following options.
- -type fileFormat
- -format value
- -image value
- -res value
- -bpp value
- -exact value
- ::ico::getIconByName file name
?option value...?
- Extracts the image with ID name from file.
This name should be the name of a specific image as returned by
::ico::iconMembers, not an icon name returned from
::ico::icons. If there is no matching resource ID in file an
error is thrown. Recognizes the following options:
- -type fileFormat
- -format value
- ::ico::getFileIcon file ?option
value...?
- This command is only functional when running under Windows.
It reads the Windows registry to determine the display icon for
file as it would appear in Explorer or similar. file does
not need to exist and may also be specified as a file extension with a
leading dot. If file is a directory or you specify the special name
Folder then the icon representing a folder is returned. This
command takes the same arguments and usage as getIcon:
- -format value
- -image value
- -res value
- -bpp value
- -exact value
- ::ico::writeIcon file name
depth data ?option value...?
- Writes an image to file. name is the resource
identifier of the image in file to write. When writing to an EXE,
DLL, or ICL file you may only overwrite existing icons with an icon of the
same dimensions and color depth. No icons may be added to these file
types.
When writing to BMP the name is ignored as this type can contain only one
image. This means if the file already existed it is completely
overwritten.
When writing to an ICO or ICODATA file if the name specified does not exist
then an image is appended and will be named the next in sequence (the
specified name is ignored). Images in ICO and ICODATA files may be
overwritten with differing dimensions or color depths. Note that you will
get strange results when displaying icons if you fail to change every
image which makes up a given icon.
- integer depth (in)
- This argument must have a value of 1, 4,
8, 24, or 32. If data has more colors than the
color depth allows an error will be generated.
- options data (in)
- This argument is either a list of colors in the format
returned by ::ico::getIcon -format colors or the name of a Tk
image.
Recognizes the following
options.
- ::ico::copyIcon file index
file2 index2 ?option value...?
- Copies the icon at index in file to
index2 in file2.
- -fromtype fileFormat
- -totype fileFormat
- ::ico::EXEtoICO file ?dir?
- Extracts all icons from the executable file to ICO
files placed in dir. ?dir? defaults to the directory file is
located in. Icon files will be named in the form file-ID.ico where
ID is the icon resource identifier.
- ::ico::clearCache ?file?
- The ::ico::getIconList command caches icon offsets
inside EXE, DLL, ICL, and ICO files in order to speed up extraction. This
command clears that cache for the specific ?file? or all files.
- ::ico::transparentColor image
color
- If image is a single word it is assumed to be the
name of a Tk image. All pixels matching color in the image
will be set transparent. Alternatively, image may be a color list
in which case a modified list is returned.
- ::ico::Show file ?option
value...?
- Application level command which displays a window showing
all the icons in file and their name.
- -type fileFormat
- -parent pathName
EXAMPLE¶
button .explore -image [::ico::getIcon explorer.exe 0 -name explore -res 16 -bpp 8]
set i [lsearch -inline [::ico::iconMembers tclkit.exe 0] {* 32 32 8}]
set colorlist [::ico::getIconByName tclkit.exe [lindex $i 0] -format colors]
LIMITATIONS¶
Icons may not be added or removed from file types other than ICO. Icons in these
files may only be replaced with icons of the same dimensions and color depth.
Icons of 8bpp or lower must include black in the pallete, this means if your
icon does not have black in it, you will need to leave a color free so that it
may be included by writeIcon.
There is currently no way to read alpha channel information from 32bpp icons.
Tk images do not have an alpha channel so the only way to write a true 32bpp
icon is from a color list. writing a 32bpp icon from a Tkimage is identical to
writing a 24bpp icon.
KEYWORDS¶
dll, entry, exe, ico, icon