Eu, quando não tinha o que fazer (normal), resolvi então criar um programinha para mudar a cor base da Imagem.
Vejam como fica uma imagem alterada com ele:
Utilizei a cor: RGB(20 20 255) como base.
O que o programa faz? Ele tira a cor da imagem, então ele blita esta certa cor com um nível de transparência encima da imagem, dando este efeito de uma cor base… Nada de interessante, mas talvez seja útil para alguém… Mas acho que não criar outra imagem, e sim fazer isso e utilizar o bitmap modificado no jogo (sem salvar)…
Ele funcniona em Linha de comando, basta você chamar ele assim: ColorImage EvilAnt.bmp 20 20 255 Teste.bmp, o nome do programa, depois o da imagem a modificar, depois os parâmetros de cores (RGB) e então a imagem a ser criada…
Código:
#include <allegro.h>
void Init();
void ColorTransform(const char *file, int color, const char *file_save);
BITMAP *TiraCor(BITMAP *bmp);
int main (int argc, char *argv[])
{
if (argc < 5)
{
allegro_message("Erro os argumentos...");
exit(-1);
}
Init();
/*allegro_message(argv[1]);
allegro_message("%i", atoi(argv[2]));
allegro_message(argv[3]);*/
ColorTransform(argv[1], makecol(atoi(argv[2]), atoi(argv[3]), atoi(argv[4])), argv[5]);
//readkey();
allegro_exit();
return 0;
}END_OF_MAIN()
void Init()
{
allegro_init();
install_keyboard();
set_color_depth(32);
//set_gfx_mode(GFX_AUTODETECT_WINDOWED, 320, 240, 0, 0);
set_window_title("ColorTransform - by CrociDB");
}
void ColorTransform(const char *file, int color, const char *file_save)
{
BITMAP *open = load_bitmap(file, NULL);
if (!open)
{
allegro_message("Problema ao carregar o arquivo...");
exit(-1);
}
BITMAP *fim = TiraCor(open);
BITMAP *cor = create_bitmap(fim->w, fim->h);
clear_to_color(cor, color);
set_trans_blender(255,255,255,70);
draw_trans_sprite(fim, cor, 0, 0);
int cor2 = getpixel(fim, 0, 0);
int cor1;
int i, j;
for (i = 0; i < fim->w; i++)
{
for (j = 0; j < fim->h; j++)
{
cor1 = getpixel(fim, i, j);
if (cor1 == cor2)
putpixel(fim, i, j, 0xFF00FF);
}
}
save_bitmap(file_save, fim, NULL);
}
BITMAP *TiraCor(BITMAP *bmp)
{
BITMAP *fim = create_bitmap(bmp->w, bmp->h);
int r, g, b, cor, cor2;
int i, j;
for (i = 0; i < bmp->w; i++)
{
for (j = 0; j < bmp->h; j++)
{
cor = getpixel(bmp, i, j);
r = getr(cor);
g = getg(cor);
b = getb(cor);
cor = (r+g+b)/3;
putpixel(fim, i, j, makecol(cor, cor, cor));
}
}
return fim;
}
Peço novamente desculpas pelo mal-código, mas foi um teste mesmo. ^^
Flw

Contato