# .ico files



## Runtime (31. Aug 2010)

Hallo Leute,

ich bin zu blöd um zu Googeln wie eine .ico-files aufgebaut, also, ich habe nichts gefunden... :noe:. Da dieses Format nicht unterstützt wird in JSE, möchte ich es selbst machen. Kann mir jemand nen Link zu ner Website geben, auf der das erklärt wird? Danke. :toll:


----------



## Marco13 (31. Aug 2010)

Auf wotsit gibt's einen link mit einem Dokument wo ein bißchen was dazu drin steht.


----------



## Runtime (31. Aug 2010)

Ich schaus ma an, danke für die schnelle Antwort!


----------



## Runtime (31. Aug 2010)

Ich möchte eher wissen, wie man solche Dateien von Grund auf liest und schreibt mit Java (drücke mich manchmal nicht so richtig aus ).


----------



## Marco13 (31. Aug 2010)

Und "nicht richtig" heißt in diesem Fall nicht "falsch", sondern "nicht ausführlich genug". Wenn ich jetzt einen Essay schreiben sollte, würde der etwa so aussehen:

_Es war einmal ein *FileInputStream*....
...
...
... 
... und wenn das *BufferedImage *nicht gestorben ist, zeigt es heute noch das Icon an"_

Dazwischen müßte halt noch aufgefüllt werden


----------



## Runtime (31. Aug 2010)

Genau so, nur warst du jetz der, welcher nicht so ganz ausführlich war .


----------



## Runtime (31. Aug 2010)

Ich hab im Google gefunden, dass ico files fast wie bmps sind. Dann hab ich mal ne icofile genommen uund ein .bmp drangehängt, und ich kann es als bmp öffnen!???:L

Edit:
Mit Java gehts aber nicht...


----------



## XHelp (31. Aug 2010)

Icons

Also .ico in .bmp umwandeln geht natürlich nicht. Du kannst vermutlich nur betrachten, weil dein Programm anhand des Headers erkennt um welchen Typ es sich handelt und nicht anhand der Endung.


----------



## Runtime (31. Aug 2010)

Hier wird nur gezeigt, wie man in C, oder C++ mit Icons hantiert, ich möchte aber wissen wie ich so ein Icon einlesen kann und dann ein BufferedImage habe.


----------



## XHelp (31. Aug 2010)

Da wird die Struktur beschrieben, damit weißt du was und wo in der Datei steht. Das wolltest du doch haben...


----------



## Runtime (31. Aug 2010)

Ich studieren die Seite morgen, danke.


----------



## Marco13 (31. Aug 2010)

Hab' gerade mal geschaut, was MS da mit diesen ICOns verbrochen hat :noe: sowas :autsch:

Ist wohl in nicht zuletzt Fleißarbeit das runterzuschreiben. Je nachdem worum es geht könnte man auch Reading Windows ICO files in Java with UCWare IconTools oder so verwenden.


----------



## Runtime (1. Sep 2010)

Wie viele bytes ist ein WORD?
Haben alle Images den gleichen Header?


----------



## XHelp (1. Sep 2010)

Word... hm... 16 bit?
Und definiere mal Header.


----------



## Runtime (1. Sep 2010)

Der Header des Bildes. Du hast das Wort weiter oben sogar selbst benutzt.


----------



## XHelp (1. Sep 2010)

Ich meinte den Header der Datei (bei Ico glaube ich 00 00 01 00).
Im Ico können ja verschiedene Bilder gespeichert werden. Und jeder von diesen Blöcken hat auch einen Header mit Information.


----------



## Runtime (1. Sep 2010)

Aber die Ico selbst hat doch auch einen Header. Den meine ich.


----------



## XHelp (1. Sep 2010)

So genau weiß ich es nicht, aber ich dächte die Icons fangen mit den oben genannten 4 Bytes an. Ob es stimmt müsste theoretisch auf der Seite beschrieben werden.


----------



## Runtime (1. Sep 2010)

4 bytes? Meinst du das:

```
typedef struct
{
    WORD           idReserved;   // Reserved (must be 0)
    WORD           idType;       // Resource Type (1 for icons)
    WORD           idCount;      // How many images?
    ICONDIRENTRY   idEntries[1]; // An entry for each image (idCount of 'em)
} ICONDIR, *LPICONDIR;
```
Edit:
Warum kann ein Icon mehrere Bilder enthalten? Ist es animiert?


----------



## XHelp (1. Sep 2010)

WORD ist 2 Byte, und in der Struktur sind alleine schon 3 da, also kommt es mit Gesamtlänge 4 Byte nicht so ganz hin.

ICO ist nicht animiert, aber afaik kann man Icons für verschiedene Größen in einer ico Datei speichern.
Ich habe mich selber mit der Spezifikation nicht beschäftigt, deswegen auch die ziemlich allgemein gehaltenen Antworten.


----------



## Runtime (1. Sep 2010)

> An Icon file, which usually has the ICO extension, contains one icon resource. Given that an icon resource can contain multiple images, it is no surprise that the file begins with an icon directory:
> 
> 
> ```
> ...



Wenn idReserved = die 4 bytes am anfang ist, ist ein WORD aber 32 bit.


----------



## Runtime (1. Sep 2010)

Stimmt das so?


----------



## XHelp (1. Sep 2010)

Nein, soweit ich weiß stimmt das nicht.


----------



## Guest2 (2. Sep 2010)

Moin, 

sieh Dir doch einfach mal ein .ico File mit dem Hexeditor an. Das sieht z.B. so aus. 


```
00	00	01	00	01	00  ...
```

Da der erste Wert als 


```
WORD           idReserved;   // Reserved (must be 0)
```

ausgewiesen ist, kann ein WORD gar keine 4Bytes lang sein, da es dann nicht mehr 0 wäre.

In den Dokumentationen zu Dateiformaten von Microsoft kannst Du davon ausgehen das ein WORD immer 2 Byte lang ist und als little endean in der Datei steht.

Für die Datei von oben gilt dann:


```
WORD           idReserved = 00 00 = 0
    WORD           idType     = 01 00 = 1
    WORD           idCount    = 01 00 = 1
```


Gruß,
Fancy


----------



## Runtime (2. Sep 2010)

Ah, jetz versteh ichs. :applaus: Danke Leute.


----------

