图像像素读取和比较c#中的预定义像素

时间:2015-03-23 09:57:42

标签: c#

我想用c#编写代码。我想读取图像的像素 我想找出这些颜色的百分比......任何帮助都将受到赞赏 这是我的代码:

myimage = new Bitmap(image Path);
pictureBox1.Image = myimage;
ht = myimage.Height;
wid = myimage.Width;
sum=ht*wid;

for (int i = 0; i < ht; ++i)
{
    for (int j = 0; j < wid; ++j)
    {
        pixel = myimage.GetPixel(j,i);

        //pixelColorStringValue = pixel.R.ToString("D3") + " " + pixel.G.ToString("D3") + " " + pixel.B.ToString("D3");
        Arrr = pixel.R;
        Aggg = pixel.G;
        Abbb = pixel.B;
        pixelColorStringValue = Arrr + " " + Aggg + " " + Abbb.ToString();

        switch (pixelColorStringValue)
        {
            case "255 255 255":
            {
                white = white + 1;
                break;
            }
            case "000 000 000":
            {
                // black pixel
                black = black + 1;
                break;
            }
        }
    }
}

wprs=(white / sum) * 100;    `
bprs=(black / sum) * 100;
blackres.Text = wprs.ToString();
whiteres.Text = bprs.ToString();

1 个答案:

答案 0 :(得分:1)

对于小图片,您的代码并非完全错误。

然而,需要进行一些改进,尤其是非常无效的比较。

如果你只想计算黑白像素,你可以使用它:

for (int i = 0; i < ht; ++i)
{
    for (int j = 0; j < wid; ++j)
    {
        Color pixel = myimage.GetPixel(j,i);
        if (pixel == Color.FromArgb(0, 0, 0)) black++;
        else if (pixel == Color.FromArgb(255, 255, 255)) white++;
    }
}

Console.WriteLine(black + " black  and " + white + " white pixels of of " + sum);

如果要计算图像中的所有颜色,可以使用此代码创建直方图:

Dictionary<Color, long> colorCount = new Dictionary<Color, long>();

for (int i = 0; i < ht; ++i)
{
    for (int j = 0; j < wid; ++j)
    {
        Color pixel = myimage.GetPixel(j, i);
        if (colorCount.ContainsKey(pixel)) colorCount[pixel]++;
        else colorCount.Add(pixel, 1);
    }
}

foreach (Color c in colorCount.Keys)
    Console.WriteLine( c.ToString() + " occurs " + colorCount[c] + " times.");

请注意,对于具有多种颜色的图像,它将创建多行输出; - )

另请注意,对于较大的图片,或者如果您需要经常进行此类分析,则不应使用GetPixel而应使用Lockbits,这样会更快(> 10倍)。有关示例,请参阅hereLockbits示例中的颜色位于data数组的字节中。