我想用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();
答案 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倍)。有关示例,请参阅here。 Lockbits
示例中的颜色位于data
数组的字节中。