Konvertieren Sie png zu hohe Qualität ico
Vielleicht ist dies ein sehr einfaches problem zu lösen, aber ich habe nicht die perfekte Lösung gefunden noch.
Ich bin versucht zu konvertieren von png zu ico mit C# und gefunden, die Frage die Konvertierung .PNG zu .ICO in C/C#, welche Art von gibt eine funktionierende Lösung wie folgt:
using (FileStream stream = File.OpenWrite(@"C:\temp\test.ico"))
{
Bitmap bitmap = (Bitmap)Image.FromFile(@"c:\temp\test.png");
Icon.FromHandle(bitmap.GetHicon()).Save(stream);
}
Für mein eigenes Projekt habe ich geändert, ist dieser Ansatz leicht zu:
string pngFile = "path/to/pngfile";
using (Bitmap bitmap = new Bitmap(pngFile))
{
using (Icon icon = Icon.FromHandle(bitmap.GetHicon()))
{
using (MemoryStream stream = new MemoryStream())
{
icon.Save(stream);
//something interesting with icon here
}
}
}
Das problem, das ich erlebe, ist, dass die resultierenden ico ist von schlechter Qualität, ich vermute, es wurde geändert, 16x16 und verloren einige Farbtiefe, vielleicht hat jetzt nur noch 16 Farben? Wie kann ich konvertieren, um eine höhere Qualität in der ico-Datei?
- Sie könnten versuchen: gist.github.com/darkfall/1656050. Ich kann Ihnen sagen, Sie gehen zu müssen, um etwas robuster als
GetHicon
denn das ist eine quick-and-dirty-Methode, und keineswegs gemeint verlustfrei. - bitte posten Sie Ihren Kommentar als eine Antwort. Ich manged zu bekommen, es funktioniert mit deinem Vorschlag und ich glaube, das ist die richtige Antwort.
InformationsquelleAutor Bazzz | 2013-06-27
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, Sie brauchen eine robuste Methode als
GetHIcon()
. Es ist eher ein "quick-and-dirty" - option, und keineswegs Verlust-weniger.Hier ist ein Beispiel einer Klasse, die erhalten werden können, die Bildqualität auf den Weg, um konvertieren von ICO:
Arithmetic operation resulted in an overflow
Fehler, wenn ich versuche, zu erzeugen, ein Symbol mit einer Höhe größer als 255 .. wahrscheinlich wegen CBYTE() erlaubte maximum ist 255 - hast du ein workaround/Anregungen für das machen von hoher Qualität Symbole, die mit Ihrem code?Überprüfen http://www.codeproject.com/Tips/627823/Fast-and-high-quality-Bitmap-to-icon-converter
Dies ist eine klare und schnelle Lösung zum konvertieren von bitmap zu png
In der referenzierten Frage die akzeptierte Lösung verwendet imagemagick, das ist ein tolles Bild-manipulation-tool, das Ihnen die Fähigkeit zur Steuerung der Größe, Farbtiefe etc. bei der Umwandlung von png zu ico. Ich würde wirklich vorschlagen, versuchen, die Lösung.
Mit der imagemagick nutzen würde Aussehen wie
convert-resize-x16 -gravity center -crop-16x16+0+0-Eingang.png \
-flatten -Farben 256-Ausgang/favicon.ico
(könnte man dann Steuern,- Größe und -Farben zu erreichen, was Sie suchen.)
Sollten die gleichen Funktionen verfügbar sein, die programmgesteuert in C# durch http://imagemagick.codeplex.com