The .desktop spec says that you *have* to use either PNG, XPM or SVG images. ICO is *not* supported anywhere I think and it should never be supported since it's a horrible format 
 
Icons are stored in "/usr/share/icons" or "~/.icons" and have the structure:
	
	
	
		Code:
	
	
		<theme>/<size>/<kind>/<long-name>.<ext>
	 
 Where:
- theme: The name of the theme, may be any string that doesn't contain "/" afaik.
 
- size: One of "8x8 16x16 22x22 24x24 32x32 48x48 64x64 128x128 256x256 scalable" (the scalable folder may only contain SVG images)
 
- kind: One of "actions animations apps categories devices emblems emotes mimetypes places status" (and some more I think; "official" FDF kinds/contexts are: "Actions, Applications, Devices, FileSystems, MimeTypes")
 
- long-name: The icon's identifier, always lower-case and dash-separated.
 
- ext: One of "png xpm svg svgz" (svgz == gzipped SVG)
 
The names of "size" and "kind" folders aren't set in stone; you may change them but must then also update the "index.theme" file in the root of your icon theme (see any icon theme as an example of what I mean):
	
	
	
		Code:
	
	
		[48x48/status]
 Context=Status
 Size=48
 Type=Fixed
 
 [256x256/actions]
 Context=Actions
 Size=256
 MinSize=56
 MaxSize=512
 Type=Scalable
	 
 
Pretty basic stuff. Oh and also - there is a fall back chain in the icon theme system, so you can create icon themes that add some icons or else fall back on other icon sets if a specific icon can't be found.
Applications load icons by name, never by file path, so e.g. the icon "preferences-desktop-font-installer" might refer to "/usr/share/icons/oxygen/scalable/apps/preferences-desktop-font-installer.svgz" or "~/.icons/foobar/16x16/apps/preferences-desktop-font-installer.png" or whatever; the application will choose an icon of appropriate size etc. depending on the context.
Read more about the standard here: 
http://standards.fre...pec-latest.html