Colorizador de Imagens

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&#91;1&#93;);
    allegro_message("%i", atoi(argv&#91;2&#93;));
    allegro_message(argv&#91;3&#93;);*/

    ColorTransform(argv&#91;1&#93;, makecol(atoi(argv&#91;2&#93;), atoi(argv&#91;3&#93;), atoi(argv&#91;4&#93;)), argv&#91;5&#93;);

    //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


Technorati : , , , ,

Anúncios

4 Respostas

  1. Poxa, muito legal mesmo. O conceito é interessante também para quem quiser desenvolver para dispositivos móveis, onde o espaço de armazenamento é mais escasso.

    Fora que dá para brincar criando ótimos [i]screen savers[/i]… 😀

  2. =D

    Muito obrigado!

    Realmente é interessante para Dispositivos Móveis, eu pretendo utilizar, já que agora eu estou entrando nessa área também. xD

    Valeu!

  3. Eu estava pensado. Dá para usar essa mesma técnica para mexer em texturas de modelos MD2, por exemplo. Ou mesmo, em um cenário inteiro do jogo, para criar algum tipo de efeito.

  4. Uhum! Por que geralmente, para fazer uma mudança, modificam a paleta de cores, mas eu num uso paleta, então aí tive que fazer isso né! hehehe

    Mas é uma técnica interessante sim! =D

    Vlww

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: