Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ampliar Imagen

Estas en el tema de Ampliar Imagen en el foro de C/C++ en Foros del Web. Me he propuesto, como ejercicio. Idear una función que amplie el tamaño de una imagen. De momento, he hecho mi "imagen virtual" con un array: ...
  #1 (permalink)  
Antiguo 05/08/2012, 16:32
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 9 meses
Puntos: 28
Ampliar Imagen

Me he propuesto, como ejercicio. Idear una función que amplie el tamaño de una imagen.

De momento, he hecho mi "imagen virtual" con un array:

Código C++:
Ver original
  1. unsigned char[10][10] Ejemplo =
  2.  
  3. {{0,0,0,2,0,0,0,0,0,0},
  4. {0,0,2,2,0,0,2,2,0,0},
  5. {0,4,4,4,2,2,4,4,0,0},
  6. {4,4,4,4,4,2,4,4,4,0},
  7. {4,4,4,4,4,4,4,4,4,0},
  8. {4,4,4,4,4,4,4,4,4,0},
  9. {4,4,4,4,4,4,4,4,4,0},
  10. {4,4,4,4,4,4,4,4,4,0},
  11. {0,4,4,4,4,4,4,4,0,0}};

Cada número representa un color de la paleta de colores, dibujando los pixeles uno a uno tenemos la imagen.

He ideado este algoritmo por el momento (Objetivo es la imagen original, y Devolver es la imagen ampliada):

Código C++:
Ver original
  1. void Escalar(Sprite Objetivo,Sprite Devolver,int x, int y,int Escala)
  2. {
  3.  
  4.      for (int j = 0; j < y; j++)
  5.            for (int i = 0; i < x;i++)
  6.                for (int l = j*Escala; l <= (j*Escala)+Escala;l++)
  7.                  for (int k = i*Escala; k <= (i*Escala)+Escala;k++)
  8.                    Devolver[k][l] = Objetivo[i][j];
  9. }

Basicamente, lo que hace es repetir los números de una matriz. Obtenemos el siguiente resultado (Escala = 2):



Código C++:
Ver original
  1. Ejemplo Original:
  2.  
  3. (0,0,0,4,4,4,4,4,0,0,)
  4. 0,0,4,4,4,4,4,4,4,0,)
  5. 0,2,4,4,4,4,4,4,4,0,)
  6. 2,2,4,4,4,4,4,4,4,0,)
  7. 0,0,2,4,4,4,4,4,4,0,)
  8. 0,0,2,2,4,4,4,4,4,0,)
  9. 0,2,4,4,4,4,4,4,4,0,)
  10. 0,2,4,4,4,4,4,4,4,0,)
  11. 0,0,0,4,4,4,4,4,0,0,)
  12. 0,0,0,0,0,0,0,0,0,0,)
  13.  
  14. Ejemplo Ampliado:
  15.  
  16. (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,)
  17. 0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,0,0,0,0,)
  18. 0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,)
  19. 0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,)
  20. 0,0,2,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,)
  21. 0,0,2,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,)
  22. 2,2,2,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,)
  23. 2,2,2,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,)
  24. 0,0,0,0,2,2,4,4,4,4,4,4,4,4,4,4,4,4,0,0,)
  25. 0,0,0,0,2,2,4,4,4,4,4,4,4,4,4,4,4,4,0,0,)
  26. 0,0,0,0,2,2,2,2,4,4,4,4,4,4,4,4,4,4,0,0,)
  27. 0,0,0,0,2,2,2,2,4,4,4,4,4,4,4,4,4,4,0,0,)
  28. 0,0,2,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,)
  29. 0,0,2,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,)
  30. 0,0,2,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,)
  31. 0,0,2,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,)
  32. 0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,0,0,0,0,)
  33. 0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,0,0,0,0,)
  34. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,)
  35. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,)

Parece que hemos conseguido nuestro objetivo, pero... Probemos ahora un valor de escala grande (20):



¡La imagen sale cuadriculada!. ¿Cómo puedo conseguir que salga más "redondeada"?. ¿Alguna idea?


PD: La imagen no sale pixelada, las manchas que se ven allí han salido al pasar las capturas a PNG

Última edición por amchacon; 05/08/2012 a las 16:39

Etiquetas: int
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:16.