• Viernes 24 de Mayo de 2024, 23:01

Autor Tema:  creación de icono a partir de imagen  (Leído 3899 veces)

antonio_18

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
creación de icono a partir de imagen
« en: Lunes 8 de Junio de 2009, 11:40 »
0
Hola a todos, hay un tema que me trae de cabeza y es que me han pedido crear un icono a partir de una imagen en c++ y no sé qué es lo que tengo que hacer... la verdad estoy un poco perdido... si alguien me pudiese ayudar lo agradecería muchísimo. Soy nuevo en esto y la verdad es que me está costando un poco.
Un saludo y muchas gracias.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: creación de icono a partir de imagen
« Respuesta #1 en: Lunes 8 de Junio de 2009, 11:51 »
0
Un icono en Windows es muy parecido a una imagen BMP. Deberías buscar los formatos de fichero de ambos e implementar alguna forma de pasar de uno a otro  ;)

http://en.wikipedia.org/wiki/ICO_(file_format)
http://en.wikipedia.org/wiki/Windows_and_OS/2_bitmap

Saludos

antonio_18

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: creación de icono a partir de imagen
« Respuesta #2 en: Lunes 8 de Junio de 2009, 12:00 »
0
Gracias por la respuesta, pero la imagen me la dan en el formato .ppm y .pgm y la verdad es que no sé qué hacer para crear el código que me pase de la imagen al icono... necesito ayuda por favor. Muchas gracias a todos.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: creación de icono a partir de imagen
« Respuesta #3 en: Lunes 8 de Junio de 2009, 12:31 »
0
Pásala de .ppm y .pgm a .bmp y luego a .ico

antonio_18

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: creación de icono a partir de imagen
« Respuesta #4 en: Lunes 8 de Junio de 2009, 12:36 »
0
Pero si el caso es que tengo que crear un algorito que me convierta la imagen en icono y eso es lo que no sé... por ejemplo si tenemos una imagen que es una matriz 0 0 0 1
          9 8 7 1
          9 8 6 5
          5 7 4 3
lo que tenemos que hacer es coger 4 a 4 los valores y calcularles la media. por ejemplo 0 0
                                                                                                                                9 8
se suman se calcula la media y ya tenemos un valor, en este caso nos quedaría una matriz de 2x2 pero crear este algoritmo es lo que no sé y es a lo que quiero que me ayuden si pueden. Se lo agradecería muchísimo.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: creación de icono a partir de imagen
« Respuesta #5 en: Lunes 8 de Junio de 2009, 13:09 »
0
Bueno, pero si los agrupas de 4 en 4 te va a quedar una matriz de 1x4 y no 2x2. Sería cuestión de agruparlos de otra forma.

antonio_18

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: creación de icono a partir de imagen
« Respuesta #6 en: Lunes 8 de Junio de 2009, 13:45 »
0
a ver... sería los cuatro de la esquina superior izquierda, que me darían un número, los de la esquina superior derecha otro, los de la esquina inferior izquierda otro y los de la esquina inferior derecha otro, en total 4 una matriz de 2x2... el problema es crear el algoritmo que me haga esto... si me podeis ayudar a hacerlo os lo agradecería

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: creación de icono a partir de imagen
« Respuesta #7 en: Lunes 8 de Junio de 2009, 15:53 »
0
Ok, no te había entendido. Suponiendo la matriz de entrada como int matriz[4][4], sería cuestión de calcular la media de matriz[0-1][0-1], matriz[0-1][2-3], matriz[2-3][0-1] y matriz[2-3][2-3]. ¿Es eso?

antonio_18

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: creación de icono a partir de imagen
« Respuesta #8 en: Lunes 8 de Junio de 2009, 19:20 »
0
mira si tenemos la matriz
0 0 0 1
9 8 7 1
9 8 6 5
5 7 4 3

la matriz resultante sería
(0+0+9+8)/4    (0+1+7+1)/4
(9+8+5+7)/4    (6+5+4+3)/4

los resultados hay que redondearlos al alza dice el problema, por lo que quedaría la matriz:
5  3
8  5

espero haberme explicado bien.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: creación de icono a partir de imagen
« Respuesta #9 en: Martes 9 de Junio de 2009, 09:37 »
0
Ok, estamos de acuerdo  ^_^

Una manera que se me ocurre ahora por la mañana  -_-  sería:

Código: C
  1. int matriz[4][4];
  2. int i,j;
  3. int suma[4] = {0,0,0,0};
  4.  
  5. /* Inicializaciones */
  6. [...]
  7.  
  8. for (i=0;i<4;i++)
  9.     for(j=0;j<4;j++)
  10.         if(i<2)
  11.             if(j<2)
  12.                 suma[0] += matriz[i][j];
  13.             else
  14.                 suma[1] += matriz[i][j];
  15.         else
  16.             if(j<2)
  17.                 suma[2] += matriz[i][j];
  18.             else
  19.                 suma[3] += matriz[i][j];
  20.  
Esto es una porquería de algoritmo  :lol: , seguramente se pueda optimizar, pero lo pongo igualmente a lo mejor alguien tiene una idea mejor viéndolo; ahora mismo no caigo en nada.

Quedaría hacer la media e insertar los resultados en una matriz 2x2 como pretendes, pero eso ya son detalles nada más, ¿no?  ;)

Un saludo

antonio_18

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: creación de icono a partir de imagen
« Respuesta #10 en: Martes 9 de Junio de 2009, 10:16 »
0
Eso sería sólo para cuando la matriz es de 4x4 no?? pero date cuenta que la matriz es una imagen que puede tener dimensiones mucho más grandes... muchas gracias de todas formas, a ver si entre todos se os ocurre algo que me pueda ayudar ya que estoy con el agua al cuello... :s
S

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: creación de icono a partir de imagen
« Respuesta #11 en: Martes 9 de Junio de 2009, 10:20 »
0
Cita de: "antonio_18"
Eso sería sólo para cuando la matriz es de 4x4 no??
Es lo que preguntaste  :P De todas formas, si la matriz resultante siempre es de 2x2, el código te vale. Otra cosa distinta es que la matriz resultante sea la mitad de la de entrada...

antonio_18

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: creación de icono a partir de imagen
« Respuesta #12 en: Martes 9 de Junio de 2009, 10:40 »
0
Yo creo que un icono de 2x2 estaría bastante bien... entonces... ese código estaría bien o se podría mejorar? es que el profesor es un poco extricto... ains... :ouch:

antonio_18

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: creación de icono a partir de imagen
« Respuesta #13 en: Martes 9 de Junio de 2009, 10:42 »
0
y ahora que estoy pensando... se podría poner, en vez de cuatro, nfils, que sería el número de filas, y ncolums, que sería número de columnas no??

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: creación de icono a partir de imagen
« Respuesta #14 en: Martes 9 de Junio de 2009, 10:58 »
0
Cita de: "antonio_18"
se podría poner, en vez de cuatro, nfils, que sería el número de filas, y ncolums, que sería número de columnas no??
Bueno, eso es evidente, pero teniendo en cuenta que la matriz es cuadrada:

Código: Text
  1. #define TAM_MATRIZ 4
  2. int matriz[TAM_MATRIZ][TAM_MATRIZ];
  3. int i,j;
  4. int suma[4] = {0,0,0,0};
  5.  
  6. /* Inicializaciones */
  7. [...]
  8.  
  9. for (i=0;i<TAM_MATRIZ;i++)
  10.     for(j=0;j<TAM_MATRIZ;j++)
  11.         if(i<TAM_MATRIZ/2)
  12.             if(j<TAM_MATRIZ/2)
  13.                 suma[0] += matriz[i][j];
  14.             else
  15.                 suma[1] += matriz[i][j];
  16.         else
  17.             if(j<TAM_MATRIZ/2)
  18.                 suma[2] += matriz[i][j];
  19.             else
  20.                 suma[3] += matriz[i][j];
  21.  
Y seguro, seguro que se puede optimizar, lo que pasa es que no tengo tiempo (ni ganas :P ) de comerme la cabeza con ello.

antonio_18

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: creación de icono a partir de imagen
« Respuesta #15 en: Martes 9 de Junio de 2009, 11:05 »
0
jajajaja! buenos, si tienes algo de tiempo ya sabes! ;)
Te lo agradecería mogollón! Aunque si dices que esto está bien no lo dudo! :P

antonio_18

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: creación de icono a partir de imagen
« Respuesta #16 en: Miércoles 10 de Junio de 2009, 11:55 »
0
Bueno tengo algo más sobre la función del icono a ver si me podeis ayudar...
si la imagen es cuadrada, se trata simplemente de fijar el tamaño final del icono a partir del tamaño inicial de la imagen. Pongamos que la imagen es 256x256 y quieres un icono 16x16. ¿Qué quiere eso decir? que cada "cuadrado" de píxeles 16x16 de la imagen original lo vas a convertir en un solo pixel en el icono ¿Cómo? Tomando la media de los niveles de grises 16x16 y ese es el píxel del icono. Por tanto, si tienes un tamaño nxn de imagen y un tamaño mxm de icono, has de convertir cada trozo (n/m)x(n/m) de la imagen en un pixel calculando la media de los niveles. Para hacerlo solo tienes que hacer el bucle correspondiente que rastree en orden los píxeles y listo.

Alguien sabe hacer este bucle?? muchísimas gracias!