C#图形填充工具

时间:2016-12-01 11:49:29

标签: c# graphics

你好我有一个小问题白色图形。

我有一张图片白色尺寸32x32的列表

我需要检测此图像中是否有彩色像素或是空的。

例如:

我的形象 [。 ]

点是图像内的像素。 我已经使用过此代码,但确实有效

 bool tile_preset = false;

                            for(int b = 0; b < temp.Height;b++)
                            {
                                for(int a = 0; a < temp.Width; a++)
                                {
                                    Color c = temp.GetPixel(a, b);
                                    tile_preset = (c.A != 0 && c.R != 0 && c.G != 0 && c.B != 0) ? true : false;
if (tile_present)
break;


                                }
                            }

在所有情况下,我都有假

否则我使用全彩色图像我有真实的

1 个答案:

答案 0 :(得分:1)

代码是&#34;错误&#34;在几个方面。首先,所有&#34;无色&#34;是否属实?图像中的像素是ARGB(0,0,0,0)

如果是这样,如果任何的颜色值不为0,则会找到彩色像素!您的代码会检查所有是否为0,因此不会计算全红色像素!

此外,您拥有的表达式已经是布尔值。为什么使用三元运算符将布尔值转换为布尔值?

第三:一旦找到非中性的像素,你必须退出循环。

bool tile_preset = false;

for(int b = 0; b < temp.Height && !tile_preset; b++)
{
    for(int a = 0; a < temp.Width && !tile_preset; a++)
    {
        Color c = temp.GetPixel(a, b);
        tile_preset = (c.A != 0 || c.R != 0 || c.G != 0 || c.B != 0);
    }
}

或者,只有在找到像素时才需要确保修改tile_preset

bool tile_preset = false;

for(int b = 0; b < temp.Height; b++)
{
    for(int a = 0; a < temp.Width; a++)
    {
        Color c = temp.GetPixel(a, b);
        tile_preset |= (c.A != 0 || c.R != 0 || c.G != 0 || c.B != 0);
    }
}

当您找到彩色像素时,这会导致tile_presetfalse更改为true,但当下一个像素再次为中性时,永远不会更改回false。< / p>