Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

BinhoW

Gerar um histograma na escala RGB

Recommended Posts

Ola pessoal sou novo aqui, e estou com problems em c# utilizando windows forms...

 

Preciso gerar um histograma na escala RGB, por favor deêm uma olhada abaixo, já consegui fazer o histograma em escala de cinza:

 

private void histograma(string canal)
        {
           

            Bitmap histo = new Bitmap(256, 100);

            int[] frequencia = new int[256];

            //for para rechear o vetor freq de zero//

            for (int i = 0; i < 256; i++)
            {
                frequencia[i] = 0;
            }

            Bitmap bmp = new Bitmap(imageOrigin);

            for (int x = 0; x < bmp.Width; x++)
                for (int y = 0; y < bmp.Height; y++)
                {
                    //Andar na imagem e depois
                    Color k = bmp.GetPixel(x, y);
                    if (canal == "RGB")//canal em grayscale
                    {
                        byte gray = (byte)(k.R*0.30 + k.G*0.59 + k.B*0.11 );

                        frequencia[gray]++;
                    }
                    if (canal == "R")//canal em red
                    {
                                             
                        frequencia[k.R]++;
                    }
                    if (canal == "G")//canal em green
                    {
                        frequencia[k.G]++;
                    }
                    if (canal == "B")//canal em blue
                    {
                        frequencia[k.B]++;
                    }
                    
                }
            //for para achar o MAX e MIN do frequencia
             

            int max = frequencia.Max();
            int min = frequencia.Min();

            int escala;
            //  int escala = (int)(Math.Log10(frequencia[]) * 100 / Math.Log10(max));
            for (int i = 0; i < 256; i++)

            {
                if (frequencia[i] > 0)
                {
                    escala = (int)(Math.Log10(frequencia[i]) * 100 / Math.Log10(max));
                    for (int g = 100 - escala; g < 100; g++)
                    {
                        //histo.SetPixel(i, g, Color.FromArgb(i, i, i));
                        histo.SetPixel(i, g, Color.FromArgb(i, i, i));
                    }
                }
                                
            }
            pictureBox1.Image = new Bitmap(histo);
            //int xx = 0;
            //
        }

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.