Tal vez este es un problema muy sencillo de resolver, pero no he encontrado la solución perfecta todavía.
Estoy tratando de convertir png a ico con C# y encontró a la pregunta de la conversión .PNG a .El ICO en C/C# que de cierta forma le da una solución de trabajo de la siguiente manera:

using (FileStream stream = File.OpenWrite(@"C:\temp\test.ico"))
{
    Bitmap bitmap = (Bitmap)Image.FromFile(@"c:\temp\test.png");
    Icon.FromHandle(bitmap.GetHicon()).Save(stream);
}

Para mi propio proyecto he cambiado este enfoque ligeramente a:

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
      }
   }
}

El problema que estoy experimentando es que el ico es de baja calidad, supongo que consiguió cambiar de tamaño de 16×16 y perdió parte de su profundidad de color, tal vez ahora solo tiene 16 colores? ¿Cómo puedo convertir en una mayor calidad del archivo ico?

  • Usted puede tratar de: gist.github.com/darkfall/1656050. Puedo decirle que usted va a necesitar algo más sólido que GetHicon porque es rápido y sucio método, y de ninguna manera pretende ser sin pérdidas.
  • por favor enviar su comentario como respuesta. I manejadas para que funcione con tu sugerencia y creo que esta es la respuesta correcta.
InformationsquelleAutor Bazzz | 2013-06-27

3 Comentarios

  1. 8

    Creo que se necesita un método más robusto que GetHIcon(). Se trata más bien de una «rápida y sucia» de la opción, y no por ello de menor pérdida.

    He aquí un ejemplo de una clase que puede preservar la calidad de la imagen en el camino a la conversión ICO:

    https://gist.github.com/darkfall/1656050

    • Gr8 script funciona como un encanto, pero estoy golpeando Arithmetic operation resulted in an overflow error si se intenta generar un icono con una altura superior a 255 .. probablemente debido a CBYTE() máximo permitido es de 255 – ¿tiene alguna solución o sugerencias para hacer de alta calidad Iconos usando el código?
  2. 2

    En la que hace referencia la pregunta aceptado solución utiliza imagemagick, que es una gran manipulación de la imagen de herramienta que le permite tener la capacidad para controlar el tamaño, profundidad de color, etc. cuando la conversión de png a ico. Yo realmente le sugiero probar esa solución.

    Usar imagemagick utilidad sería algo como

    convert-resize x16 -centro de gravedad -cosecha de 16 x 16+0+0 entrada.png \
    -acoplar -colores 256 de salida/favicon.ico

    (que podría, a continuación, el control de cambio de tamaño y los colores para conseguir lo que usted está buscando.)

    Las mismas opciones deben estar disponibles mediante programación en C# a través de http://imagemagick.codeplex.com

    • Lo siento por no haber mencionado en la pregunta, pero prefiero no tener que depender de librerías externas, si es posible. Me gustaría considerar su sugerencia, si todo lo demás falla.

Dejar respuesta

Please enter your comment!
Please enter your name here