Código:
void draw_heatmap()
{
// Vamos a dibujar píxeles en pantalla
SDL_Surface *pantalla, *recuadro;
// Variables auxiliares
SDL_Rect destino;
Uint32 color[18];
SDL_Event evento;
unsigned int i;
unsigned int j;
unsigned int cx;
unsigned int cy;
unsigned int aux_color;
unsigned char xi,yi,xo,yo,x_count,y_count,count,change;
signed char sentido,distance;
//Paleta de color, 16 colores desde el azul al rojo
color[1] = SDL_MapRGB(screen->format, 0, 0, 255);
color[2] = SDL_MapRGB(screen->format, 0, 67, 255);
color[3] = SDL_MapRGB(screen->format, 0, 131, 255);
color[4] = SDL_MapRGB(screen->format, 0, 195, 255);
color[5] = SDL_MapRGB(screen->format, 0, 255, 249);
color[6] = SDL_MapRGB(screen->format, 0, 255, 181);
color[7] = SDL_MapRGB(screen->format, 0, 255, 118);
color[8] = SDL_MapRGB(screen->format, 0, 255, 53);
color[9] = SDL_MapRGB(screen->format, 10, 255, 0);
color[10] = SDL_MapRGB(screen->format, 74, 255, 0);
color[11] = SDL_MapRGB(screen->format, 138, 255, 0);
color[12] = SDL_MapRGB(screen->format, 202, 255, 0);
color[13] = SDL_MapRGB(screen->format, 255, 242, 0);
color[14] = SDL_MapRGB(screen->format, 255, 175, 0);
color[15] = SDL_MapRGB(screen->format, 255, 112, 0);
color[16] = SDL_MapRGB(screen->format, 255, 47, 0);
// Obtenemos el color blanco
color[0] = SDL_MapRGB(screen->format, 0, 0, 0);//Negro
SDL_FillRect(screen, NULL, color[0]);
SDL_Flip(screen);
color[17] = SDL_MapRGB(screen->format, 255, 255, 255);//Blanco
//Datos originales, [x][y]
orig_data[0][0] = 1;
orig_data[1][0] = 1;
orig_data[2][0] = 1;
orig_data[0][1] = 1;
orig_data[1][1] = 16;
orig_data[2][1] = 1;
orig_data[0][2] = 1;
orig_data[1][2] = 1;
orig_data[2][2] = 1;
//Interpolar datos
//Eje X
for(yo=0;yo<3;yo++)
{
for(xo=0;xo<2;xo++)
{
interp_data[xi][yi] = orig_data[xo][yo];
distance = orig_data[xo][yo] - orig_data[xo+1][yo];
if(distance<0)
{
sentido = 1;//ASCENDENTE
}
else
{
sentido = -1;//DESCENDENTE
}
distance = abs(distance);
distance += 1;
change = 16/distance;
aux_color = interp_data[xi][yi];
count = 0;
for(x_count=0;x_count<15;x_count++)
{
if(count==change)
{
count=0;
aux_color = aux_color + sentido;
if(aux_color<1)
{
aux_color = 1;
}
if(aux_color>16)
{
aux_color = 16;
}
}
interp_data[xi+x_count][yi] = aux_color;
count++;
}//fin for x_count
xi += 15;
}//Fin for xo
interp_data[xi][yi] = orig_data[2][yo];
yi += 15;
xi = 0;
}//Fin for yo
for(xi=0;xi<31;xi++)
{
for(yi=0;yi<30;yi+=15)
{
aux_color = interp_data[xi][yi];
distance = interp_data[xi][yi] - interp_data[xi][yi+15];
if(distance<0)
{
sentido = 1;
}
else
{
sentido = -1;
}
distance = abs(distance);
distance += 1;
change = 16/distance;
count=0;
for(y_count=0;y_count<15;y_count++)
{
if(count==change)
{
count=0;
aux_color = aux_color + sentido;
if(aux_color<1)
{
aux_color = 1;
}
if(aux_color>16)
{
aux_color = 16;
}
}
interp_data[xi][yi+y_count] = aux_color;
count++;
}
}//Fin de for yi
}//Fin de for xi
//Dibujar datos originales
destino.w = 16;
destino.h = 16;
cx = 0;
cy = 0;
i = 0;//x
j = 0;//y
while(cy<48)
{
while(cx<48)
{
destino.x = cx;
destino.y = cy;
aux_color = orig_data[i][j];
SDL_FillRect(screen, &destino, color[aux_color]);
cx += 16;
i += 1;
}
cy += 16;
cx = 0;
i = 0;
j += 1;
}
//Dibujar datos interpolados
destino.w = 5;
destino.h = 5;
cx = 56;
cy = 56;
i = 0;//x
j = 0;//y
while(cy<211)
{
while(cx<211)
{
destino.x = cx;
destino.y = cy;
aux_color = interp_data[i][j];
SDL_FillRect(screen, &destino, color[aux_color]);
cx += 5;
i += 1;
}
cy += 5;
cx = 56;
i = 0;
j += 1;
}
SDL_Flip(screen);
WaitForKey();
}
Gracias anticipadas, por las futuras respuestas.
Marcadores