Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Icon wird mit weniger Farben gespeichert als das Original (https://www.delphipraxis.net/47045-icon-wird-mit-weniger-farben-gespeichert-als-das-original.html)

Zacherl 5. Jun 2005 18:16


Icon wird mit weniger Farben gespeichert als das Original
 
Hallo,
ich habe folgendes Problem:

ich extrahiere ein Icon aus einer Datei und speichere das Ergebniss in einem TIcon.
Ich verwende Canvas.Draw(5, 5, ExtIcon) um eine Vorschau anzuzeigen. Das funktioniert auch wunderbar, aber wenn ich ExtIcon.SaveToFile('test.ico') aufrufe wird dass Icon zwar gespeichert, aber Icons mit mehr als 256 Farben werden nicht als solche gespeichert. Das gespeicherte Icon hat immer weniger Farben, als das Original :wall: ... Aber in der Vorschau ist alles ok.

Gibt es vielleicht eine Möglichkeit das Icon in ein Bitmpa zu laden und dieses als Icon zu speichern?
Oder kennt jemand eine andere Lösung des Problems?

Florian

DP-Maintenance 5. Jun 2005 18:18

DP-Maintenance
 
Dieses Thema wurde von "alcaeus" von "Sonstige Fragen zu Delphi" nach "Multimedia" verschoben.
Gehoert wohl eher nach Multimedia

DGL-luke 5. Jun 2005 19:45

Re: Icon wird mit weniger Farben gespeichert als das Origina
 
war es nicht immer so:

Icon == Gif89a ?!

funktioniert jedenfalls bei favicons.....

Zacherl 6. Jun 2005 06:16

Re: Icon wird mit weniger Farben gespeichert als das Origina
 
Tut mir Leid, aber ich weis nicht was du meinst...

Florian

marabu 6. Jun 2005 08:00

Re: Icon wird mit weniger Farben gespeichert als das Origina
 
Hallo Florian,
Zitat:

Zitat von Florian Bernd
ich extrahiere ein Icon aus einer Datei und speichere das Ergebniss in einem TIcon.

wie machst du das? Nimmst du Assign(), dann wird beim Schreiben mit SaveToFile() die Farbtiefe auf 4-bit eingestellt. Bei LoadFromFile() gibt es dieses Problem nicht. Versuche es mal mit LoadFromStream().

Grüße vom marabu

Zacherl 6. Jun 2005 15:36

Re: Icon wird mit weniger Farben gespeichert als das Origina
 
Meine Funktion gibt ein HIcon Handle zurück, welches ich dann dem TIcon zuweise:

Delphi-Quellcode:
ExtIcon := TIcon.Create;
ExtIcon.Handle := IconFromFile('test.exe', 0);
Hier noch die Extrahierfunktion:

Delphi-Quellcode:
function IconFromFile(const Filename: String; IconNr: Word): HICON;
var buffer: array[0..2*MAX_PATH]of Char;
begin
  StrPCopy(buffer, Filename);
  Result := ExtractAssociatedIcon(HInstance, buffer, IconNr);
end;
kann man denn die Farbtiefe manuell einstellen?

Florian

DGL-luke 6. Jun 2005 16:48

Re: Icon wird mit weniger Farben gespeichert als das Origina
 
Zitat:

Zitat von Florian Bernd
Tut mir Leid, aber ich weis nicht was du meinst...

Florian

ja, sorry.

es ist so: ein favicon(symbol das neben der adresse erscheint) für eine website heisst immer "favicon.ico" und liegt im root-dir, da wo auch index.html ist. erzeugen kann man sie, indem man eine gif-datei nimmt und die dateinmanenserweiterung auf .ico ändert.

ich habs gerade nochmal ausprobiert. gif->ico scheint zu gehen, andersrum aber nicht.

Zacherl 6. Jun 2005 17:40

Re: Icon wird mit weniger Farben gespeichert als das Origina
 
Das Problem ist nur, dass Gif meines Wissens Nach auch nur 265 Farben unterstüzt. Und manche Icons haben ja mehr als die 256 Farben ...

Florian

SirThornberry 6. Jun 2005 18:42

Re: Icon wird mit weniger Farben gespeichert als das Origina
 
das favicon heißt nicht immer "favicon.ico". Im Header eine HTML-Datei kann auch ein andere Dateiname für das favicon stehen.

jfheins 6. Jun 2005 19:28

Re: Icon wird mit weniger Farben gespeichert als das Origina
 
Zitat:

Zitat von DGL-luke
erzeugen kann man sie, indem man eine gif-datei nimmt und die dateinmanenserweiterung auf .ico ändert.

Aua, es mag vielleicht gehen, aber:
Zitat:

Sind Icons nur umbenannte BMP- oder GIF-Dateien?
Nein, .ico sind keine umbenannten Bitmap-Dateien! Durch Umbenennen von favicon.bmp in favicon.ico erhalten Sie kein funktionsfähiges Favicon, besonders im MSIE führt dies oft zu Problemen, d.h. das Favicon wird nicht angezeigt. Verwenden Sie einen Icon-Editor wie z.Bsp. Microangelo oder IrfanView, damit können Sie Dateien im ICO-Format abspeichern.
Quelle: http://favicon.de/fragen.html

Zacherl 6. Jun 2005 20:36

Re: Icon wird mit weniger Farben gespeichert als das Origina
 
Vielen Dank für die Antworten,
aber ich glaube ihr weicht ein wenig vom Thema ab ... :???:

Ich würde das aus einer Datei extrahierte Icon wenn möglich gerne auch als *.ico speichern, nur wird ja die Frabtiefe verändert.

Die Frage ist jetzt: Kann man die Farbtiefe von TIcon manuell anpassen, oder wie kann man das Icon
anders mit der original Farbtiefe speichern.

Florian

FAlter 16. Okt 2007 19:27

Re: Icon wird mit weniger Farben gespeichert als das Origina
 
Hi,

ich würde auch gerne ein 24-Bit-Icon speichern und krame mal diesen Thread raus, da es das gleiche Problem ist, nämlich, dass es beim Speichern weniger Farben bekommt.

In meinem Fall wird das Icon über eine ImageList erstellt. Ein Teil meiner Funktion, die das TIcon zurückliefert, sieht so aus:

Delphi-Quellcode:
with TImageList.CreateSize(FWidth, FHeight) do
try
  Add(BMP, Mask);
  GetIcon(0, Result);
finally
  Free;
end;
Dabei ist BMP 24 bit und bei Mask ist 1 bit.

Wie könnte man das Icon jetzt z. B. per Win-API als 24 Bit speichern?

Mfg
FAlter

Progman 16. Okt 2007 19:41

Re: Icon wird mit weniger Farben gespeichert als das Origina
 
Für Icons kann ich nur Axialis IconWorkshop empfehlen. Der kann sogar Vista komforme Icons und macht keine Probleme mit der Farbtiefe.

FAlter 16. Okt 2007 19:54

Re: Icon wird mit weniger Farben gespeichert als das Origina
 
Hi,

ein fertiges Programm hilft mir bei dem Problem leider nicht weiter. Ich möchte mit meinem eigenen Programm ein 24 Bit TIcon speichern und nicht mit irgendeinem Programm.

Mfg
FAlter

Progman 16. Okt 2007 20:00

Re: Icon wird mit weniger Farben gespeichert als das Origina
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hm, dann musst du aber auch berücksichtigen, dass eine ico-Datei mehrere Bilder in den unterschiedlichsten Größen (16x16 bis u.U. 256x256) und Farbtiefen enthält. Das was Delphi als ico abspeichert ist doch schon seit Delphi2 gleichgeblieben und hoffnungslos veraltet ;)
So sehen heute Windows-Icons innen aus (Anhang).

FAlter 17. Okt 2007 06:36

Re: Icon wird mit weniger Farben gespeichert als das Origina
 
Hi,

es geht mit nicht darum, einen Icon-Editor zu schreiben, sondern lediglich die Option zu geben, ein Bild auch als *.ico zu speichern. Ungefähr so wie IrfanView - das speichert dann auch nur ein einzelnes Icon. Dass Icons und Cursor verschiedene Bilder in verschiedenen Auflösungen und Farbtiefen beinhalten können, ist mir durchaus bewusst. Eines mit der richtigen Farbanzahl würde mir schon reichen.

Mfg
FAlter

Progman 17. Okt 2007 06:48

Re: Icon wird mit weniger Farben gespeichert als das Origina
 
Naja, wie gesagt, mit Delphi-Bordmitteln kann man nur Icons im uralt-Format speichern. Müsste man versuchen, rauszufinden, ob es irgendwo eine Unit/Komponente gibt, die das richtig kann. Mir ist jedenfalls keine bekannt.

FAlter 17. Okt 2007 18:15

Re: Icon wird mit weniger Farben gespeichert als das Origina
 
Hi,

ich hab in der Zwischenzeit weiter nach ner Lösung gesucht...
www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_20341923.html+HICON+%22save+to+file%22&hl=de&ct= clnk&cd=8&gl=de]und das gefunden[/url]. Leider kann man den direkten Link nicht lesen, daher der Umweg über den Google-Cache.

Ich werd mal ne Unit draus machen und es ausprobieren. Das würde dann auch mehrere Icons in einer Datei unterstützen.

Mfg
FAlter

Progman 17. Okt 2007 18:23

Re: Icon wird mit weniger Farben gespeichert als das Origina
 
jo, liest sich gut, versuchs halt mal :)

FAlter 17. Okt 2007 20:39

Re: Icon wird mit weniger Farben gespeichert als das Origina
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hi,

Delphi-Quellcode:
uses
  IconTools;

var
  Icon1, Icon2: TIcon;
  FileName: String;

WriteIconsToFile(FileName, [Icon1, Icon2]);
Sieht schon mal besser aus ;-)

Mfg
FAlter

Progman 17. Okt 2007 20:44

Re: Icon wird mit weniger Farben gespeichert als das Origina
 
cool, ich habs mir gleich in mein Archiv gepackt, man weiß ja nie, ob mans mal brauchen kann.
Danke. ;)

FAlter 18. Okt 2007 09:16

Re: Icon wird mit weniger Farben gespeichert als das Origina
 
Hi,

noch eine kleine Korrektur:

Delphi-Quellcode:
function WriteIcons(Stream: TStream; const Icons: array of TIcon): Boolean;
  ...
 
  Result := WriteIconsFromHandles(Stream, HandleArray);
end;

function WriteIconsToFile(const FileName: String; const Icons: array of TIcon):
  Boolean;
  ...
    Result := WriteIcons(Stream, Icons);
Ich habe das Result := vergessen gehabt :oops:

Mfg
FAlter


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz