GARANTIR DESCONTO

Fórum Tratamento de Imagens #326553

31/07/2006

0

Estou com um projeto onde tenho q fazer alguns calculos com relação a impressao de imagens.

Um dos calculos é a cobertura de tinta utilizada para aquela imagem.

Para PhotoShop, existe um plugin que lhe da essa informação. Porem o desenvolvedor do mesmo descontinuou o projeto.

Gostaria de desenvolver uma solução em delphi para o assunto. Ou seja, criar um componente q analise a imagem e retorne a porcentagem de cobertura de cada tinta (padrao CMYK por ex.)

Alguem tem alguma dica de como esses calculos sao feitos ou algum material a respeito?

ps: jah perguntei isso aqui a algum tempo e nao houve resposta, ppor isso estou tentando dnovo.


M@gnun

M@gnun

Responder

Posts

01/08/2006

M@gnun

UP ...


Responder

Gostei + 0

01/08/2006

Rodc

Você pode percorrer a imagem pegando o valor das cores através do Brush.Pixel[x, y], que retorna o RGB do píxel. Daí é só fazer três vetores de 255 posições, um para cada cor, iniciar com zero as posições e percorrer os píxels fazendo a amostragens dos valores.
Não sei se fui claro, mas tenta fazer aí e se não conseguir me avisa.


Responder

Gostei + 0

01/08/2006

M@gnun

valeu pela ajuda rodc ... soh q eu nao entendi...

se puder e quizer, me adiciona ai magnun_magnun@hotmail.com p/ me explicar ...

Obrigado ...


Responder

Gostei + 0

01/08/2006

Rodc

Não tenho MSN... na verdade é difícil de explicar sem ter como desenhar... depois vou tentar fazer um teste e te envio.


Responder

Gostei + 0

01/08/2006

M@gnun

ok valeu, enquanto isso eu vo vendo se consigo ...


Responder

Gostei + 0

01/08/2006

Rodc

Olá, fiz o código mas em C++ Builder. Para converter troque os ´->´ por ponto e os [x][y] por [x,y]. Os {} são begin e end, respectivamente.
// Declara o vetor das três cores
    int VetorR[256], VetorG[256], VetorB[256];

    // Zera o vetor das cores
    for (int x=0; x<256; x++)
    {
        VetorR[x] = 0;
        VetorG[x] = 0;
        VetorB[x] = 0;
    }

    // Percorre os píxels somando a posição correspondente à intensidade no vetor da cor
    for (int y = 0; y < Image1->Height; y++)
    {
        for (int x = 0; x < Image1->Width; x+=3)
        {
            VetorR[GetRValue(Image1->Canvas->Pixels[x][y])]++;
            VetorG[GetGValue(Image1->Canvas->Pixels[x][y])]++;
            VetorB[GetBValue(Image1->Canvas->Pixels[x][y])]++;
        }
    }

    // Mostra o gráfico de intensidades da cor Vermelha
    for (int x=0; x<256; x++)
    {
        Image2->Canvas->MoveTo(x, 0);
        Image2->Canvas->LineTo(x, VetorR[x]/2);
    }

    // Mostra o gráfico de intensidades da cor Verde
    for (int x=0; x<256; x++)
    {
        Image3->Canvas->MoveTo(x, 0);
        Image3->Canvas->LineTo(x, VetorG[x]/2);
    }

    // Mostra o gráfico de intensidades da cor Azul
    for (int x=0; x<256; x++)
    {
        Image4->Canvas->MoveTo(x, 0);
        Image4->Canvas->LineTo(x, VetorB[x]/2);
    }

Para funcionar, inclua o código acima em um botão e coloque no form quatro TImage. O primeiro deve ter a imagem à se analisada e os outros três devem ter 256 de Width e 128 de Height.

Vou lhe mandar um executável compilado em C++ para você ver ele funcionando, caso não consiga montar o código acima em Delphi.

Abraços


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar