![]() |
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
Dieses Thema wurde von "alcaeus" von "Sonstige Fragen zu Delphi" nach "Multimedia" verschoben.
Gehoert wohl eher nach Multimedia |
Re: Icon wird mit weniger Farben gespeichert als das Origina
war es nicht immer so:
Icon == Gif89a ?! funktioniert jedenfalls bei favicons..... |
Re: Icon wird mit weniger Farben gespeichert als das Origina
Tut mir Leid, aber ich weis nicht was du meinst...
Florian |
Re: Icon wird mit weniger Farben gespeichert als das Origina
Hallo Florian,
Zitat:
Grüße vom marabu |
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:
Hier noch die Extrahierfunktion:
ExtIcon := TIcon.Create;
ExtIcon.Handle := IconFromFile('test.exe', 0);
Delphi-Quellcode:
kann man denn die Farbtiefe manuell einstellen?
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; Florian |
Re: Icon wird mit weniger Farben gespeichert als das Origina
Zitat:
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. |
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 |
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.
|
Re: Icon wird mit weniger Farben gespeichert als das Origina
Zitat:
Zitat:
![]() |
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 |
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:
Dabei ist BMP 24 bit und bei Mask ist 1 bit.
with TImageList.CreateSize(FWidth, FHeight) do
try Add(BMP, Mask); GetIcon(0, Result); finally Free; end; Wie könnte man das Icon jetzt z. B. per Win-API als 24 Bit speichern? Mfg FAlter |
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.
|
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 |
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). |
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 |
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.
|
Re: Icon wird mit weniger Farben gespeichert als das Origina
Hi,
ich hab in der Zwischenzeit weiter nach ner Lösung gesucht... ![]() Ich werd mal ne Unit draus machen und es ausprobieren. Das würde dann auch mehrere Icons in einer Datei unterstützen. Mfg FAlter |
Re: Icon wird mit weniger Farben gespeichert als das Origina
jo, liest sich gut, versuchs halt mal :)
|
Re: Icon wird mit weniger Farben gespeichert als das Origina
Liste der Anhänge anzeigen (Anzahl: 2)
Hi,
Delphi-Quellcode:
Sieht schon mal besser aus ;-)
uses
IconTools; var Icon1, Icon2: TIcon; FileName: String; WriteIconsToFile(FileName, [Icon1, Icon2]); Mfg FAlter |
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. ;) |
Re: Icon wird mit weniger Farben gespeichert als das Origina
Hi,
noch eine kleine Korrektur:
Delphi-Quellcode:
Ich habe das Result := vergessen gehabt :oops:
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); Mfg FAlter |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz