# Icon aus Exe einbinden



## Pommes9485 (5. Nov 2011)

Guten Tag,

mein Ziel ist es die .ico aus einer beliebiegen Datei einzulesen und diese anzuzeigen.
Ich habe dazu schon diese Seite gefunden :
Galileo Computing, Artikel Windows-Icons
Ich habe den oben Code Snippet kopiert und auch die Datein in den Klassenpfad eingepackt. Importiert habe ich sie auch, allerding kommt bei mir IMMER :
List list = ico.getEntries() <-- Incompabli Types

Habe die doc durchsucht und auch schon die Methode getImages() getestet, welche auch direkt eine List wiedergeben soll.Immer das gleiche ...

Was mache ich falsch ?


----------



## HoaX (5. Nov 2011)

"Incompatible Types" heißt, dass die Datentypen nicht passen. Also die Methode keine List zurück gibt oder du nicht java.util.List sondern irgendeine andere importiert hast.


----------



## Pommes9485 (5. Nov 2011)

Danke, hatte java.awt auch ncoh vollständig importiert.

Jetzt kommt das nächste Problem :
Er findet die Klasse ICOEntry nicht.

Habe schon alles durchsucht, sie bleibt verschollen...


----------



## compuwurml (6. Nov 2011)

Pommes9485 hat gesagt.:


> Danke, hatte java.awt auch ncoh vollständig importiert.
> 
> Jetzt kommt das nächste Problem :
> Er findet die Klasse ICOEntry nicht.
> ...



Kann es sein das es keine offizielle Klasse ist?

Ich hab das hier im Internet gefunden:


```
package com.ctreber.aclib.image.ico;

import java.awt.Image;
import java.io.IOException;

import com.ctreber.aclib.image.FileDecoder;

/**
 * <p>Icon entry in image file.</p>
 *
 * <p>&copy; 2002 Christian Treber, [email]ct@ctreber.com[/email] (Mar 27, 2003)</p>
 * @author Christian Treber, [email]ct@ctreber.com[/email]
 *
 */
public class ICOEntry
{
    private ICOHeader fHeader;
    private int fWidth;
    private int fHeight;
    private int fColorCount;
    private int fReserved;
    private int fPlanes;
    private int fBitCount;
    private int fSize;
    private int fOffset;
    private ICOBitmap fBitmap;
    // RGB images have no mask
    private ICOBitmapMask fMask;

    // 16 Bytes
    public ICOEntry(FileDecoder pDec) throws IOException
    {
        ICOFile.log(2, "Reading entry at " + pDec.getPos());
        fWidth = pDec.readUInt1();
        fHeight = pDec.readUInt1();
        fColorCount = pDec.readUInt1();
        fReserved = pDec.readUInt1();
        fPlanes = pDec.readUInt2();
        fBitCount = pDec.readUInt2();
        fSize = pDec.readUInt4();
        fOffset = pDec.readUInt4();
        ICOFile.log(2, this.toString());
    }

    public String toString()
    {
        return
            "Entry: width: " + fWidth +
            ", height: " + fHeight +
            ", colorCount: " + fColorCount + " (" + getColorCount() + ")" +
            ", planes: " + fPlanes +
            ", bitCount: " + fBitCount +
            ", size: " + fSize +
            ", offset: " + fOffset;
    }

    /**
     * @return Image with indexed colors. Returns null if an indexed image can't
     * be created (from an RGB icon). Transparency information that might be
     * present in the ICO file is lost. See {@link #getImageRGB}.
     */
    public Image getImageIndexed()
    {
        if(!(fBitmap instanceof ICOBitmapIndexed))
        {
            // Can't create indexed image from RGB icon.
            return null;
        }
        ICOBitmapIndexed lBitmap = (ICOBitmapIndexed)fBitmap;
        return lBitmap.createImageIndexed();
    }

    /**
     * @return Bits per pixel. If the bit count of the entry is 0, the bit count
     * of the header is returned. See {@link #getBitCountRaw}.
     */
    public int getBitCount()
    {
        return fBitCount != 0 ? fBitCount : fHeader.getBitCount();
    }

    /**
     * @return The original bit count. See {@link #getBitCount}.
     */
    public int getBitCountRaw()
    {
        return fBitCount;
    }

    /**
     * @return Image with ARGB colors. This method works for indexed color and
     * RGB ICO files. Transparency information that might be present in the ICO
     * is used. See {@link #getImageIndexed}.
     */
    public Image getImageRGB()
    {
        return fBitmap.createImageRGB();
    }

    /**
     * @return The original color count (note "0" means "256").
     * See {@link #getColorCount}
     */
    public int getColorCountRaw()
    {
        return fColorCount;
    }

    /**
     * @return The actual color count. See {@link #getColorCountRaw}
     */
    public int getColorCount()
    {
        return fColorCount == 0 ? 256 : fColorCount;
    }

    public int getHeight()
    {
        return fHeight;
    }

    public int getOffset()
    {
        return fOffset;
    }

    public int getPlanes()
    {
        return fPlanes;
    }

    public int getReserved()
    {
        return fReserved;
    }

    public int getSize()
    {
        return fSize;
    }

    public int getWidth()
    {
        return fWidth;
    }

    public ICOHeader getHeader()
    {
        return fHeader;
    }

    public void setHeader(ICOHeader pHeader)
    {
        fHeader = pHeader;
    }

    public ICOBitmapMask getMask()
    {
        return fMask;
    }

    public void setMask(ICOBitmapMask pLBitmapAnd)
    {
        fMask = pLBitmapAnd;
    }

    public ICOBitmap getBitmap()
    {
        return fBitmap;
    }

    public void setBitmap(ICOBitmap pLBitmapXor)
    {
        fBitmap = pLBitmapXor;
    }
}
```


----------



## HoaX (6. Nov 2011)

In deinem Link aus dem ersten Post steht doch dort dass noch eine Lib benötigt wird. Da wird die Klasse dann drin sein.


----------



## Pommes9485 (6. Nov 2011)

ICOEntry sollte zu der gleichen LIB gehören, diese habe ich ja bereits eingebunden.

@compuwurml
Ich werde mir das nocheinmal genauer angucken.


----------



## j-complex (8. Nov 2011)

Pommes9485 hat gesagt.:


> ICOEntry sollte zu der gleichen LIB gehören, diese habe ich ja bereits eingebunden.



Die Code Beispiele aus dem von dir zitierten Buch sind aus dem Jahre 2005. An der Lib wurde hingegen bis Mitte 2009 aktiv weitergearbeitet (siehe Sourceforge). Die Klasse ICOEntry gibt es wohl in der aktuellen Lib nicht mehr. Stattdessen findest du in der Lib eine Klasse namens ICOReader welche die privaten Instanz-Methoden getICOFile und getICOEntry bereitstellt. Das dürfe wohl das sein was du suchst. Da ich mit der Lib nie gearbeitet habe, kann ich ich dir dazu aber kein konkretes Beispiel geben. Schau dir dann am besten den Quellcode der Klasse und die mitgelieferte Javadoc an.


----------



## Pommes9485 (9. Nov 2011)

Ich wühle mich mal durch die Klassen^^


----------



## Pommes9485 (9. Nov 2011)

Leider bekomme ich bei erstellen der ICOFile einen Fehler 144 weil er den Typ nicht kennt...

Da die Entwicklung seit 2009 eingestellt ist zweifle ich daran, das die Person mir noch helfen wird.

Kennt jemand noch nen anderen Weg um an die ICOs zu kommen ?


----------



## XHelp (9. Nov 2011)

Was denn für einen Fehler 144?


----------



## irgendjemand (9. Nov 2011)

and ICO schon mal garnicht ... weil java kein ICO unterstützt ... also eher was bitmap-artiges *zumal ICO ein datentyp von MS ist und MS ja bekanntlich nie irgendwelche specs rausrückt ...


----------



## XHelp (9. Nov 2011)

> zumal ICO ein datentyp von MS ist und MS ja bekanntlich nie irgendwelche specs rausrückt


jaaa.... Das Format ist so geheim, dass es selbst bei wikipedia beschrieben ist.


----------



## Pommes9485 (9. Nov 2011)

Habe es geschafft, verstehe garnicht wieso ich das vorher nicht gefunden habe...
Hier der Link für die Interessierten :
Display icon associated with an executable - Real's Java How-to

Hat sich somit erledigt ...


----------

