De momento, he hecho mi "imagen virtual" con un array:
Código C++:
Ver original
unsigned char[10][10] Ejemplo = {{0,0,0,2,0,0,0,0,0,0}, {0,0,2,2,0,0,2,2,0,0}, {0,4,4,4,2,2,4,4,0,0}, {4,4,4,4,4,2,4,4,4,0}, {4,4,4,4,4,4,4,4,4,0}, {4,4,4,4,4,4,4,4,4,0}, {4,4,4,4,4,4,4,4,4,0}, {4,4,4,4,4,4,4,4,4,0}, {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
void Escalar(Sprite Objetivo,Sprite Devolver,int x, int y,int Escala) { for (int j = 0; j < y; j++) for (int i = 0; i < x;i++) for (int l = j*Escala; l <= (j*Escala)+Escala;l++) for (int k = i*Escala; k <= (i*Escala)+Escala;k++) Devolver[k][l] = Objetivo[i][j]; }
Basicamente, lo que hace es repetir los números de una matriz. Obtenemos el siguiente resultado (Escala = 2):
Código C++:
Ver original
Ejemplo Original: (0,0,0,4,4,4,4,4,0,0,) 0,0,4,4,4,4,4,4,4,0,) 0,2,4,4,4,4,4,4,4,0,) 2,2,4,4,4,4,4,4,4,0,) 0,0,2,4,4,4,4,4,4,0,) 0,0,2,2,4,4,4,4,4,0,) 0,2,4,4,4,4,4,4,4,0,) 0,2,4,4,4,4,4,4,4,0,) 0,0,0,4,4,4,4,4,0,0,) 0,0,0,0,0,0,0,0,0,0,) Ejemplo Ampliado: (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,) 0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,0,0,0,0,) 0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,) 0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,) 0,0,2,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,) 0,0,2,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,) 2,2,2,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,) 2,2,2,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,) 0,0,0,0,2,2,4,4,4,4,4,4,4,4,4,4,4,4,0,0,) 0,0,0,0,2,2,4,4,4,4,4,4,4,4,4,4,4,4,0,0,) 0,0,0,0,2,2,2,2,4,4,4,4,4,4,4,4,4,4,0,0,) 0,0,0,0,2,2,2,2,4,4,4,4,4,4,4,4,4,4,0,0,) 0,0,2,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,) 0,0,2,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,) 0,0,2,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,) 0,0,2,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,) 0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,0,0,0,0,) 0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,0,0,0,0,) 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,) 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