Może to bardzo łatwy problem do rozwiązania, ale nie znalazłem jeszcze idealnego rozwiązania. Próbuję przekonwertować PNG do ICO z C# i znalazł pytanie converting .PNG to .ICO in C/C# jakiego rodzaju daje roztwór roboczy jak poniżej:Konwersja png na wysokiej jakości ico
using (FileStream stream = File.OpenWrite(@"C:\temp\test.ico"))
{
Bitmap bitmap = (Bitmap)Image.FromFile(@"c:\temp\test.png");
Icon.FromHandle(bitmap.GetHicon()).Save(stream);
}
dla własnego projektu I zmieniły to podejście nieco do:
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
}
}
}
Problem, którego doświadczam, polega na tym, że wynikowe ico jest niskiej jakości, domyślam się, że zostało zmienione na 16x16 i straciło część jego głębi kolorów, może teraz ma tylko 16 kolorów? Jak mogę przekonwertować plik ICo wyższej jakości?
Możesz spróbować: https://gist.github.com/darkfall/1656050. Mogę ci powiedzieć, że będziesz potrzebował czegoś mocniejszego niż "GetHicon", ponieważ jest to szybka i brudna metoda, która w żadnym wypadku nie ma być bezstratna. – DonBoitnott
@DonBoitnott, proszę zaksięguj swój komentarz jako odpowiedź. Wymyśliłem, że działam zgodnie z Twoją sugestią i uważam, że jest to poprawna odpowiedź. – Bazzz