你好我有一个小问题白色图形。
我有一张图片白色尺寸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;
}
}
在所有情况下,我都有假
否则我使用全彩色图像我有真实的
答案 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_preset
从false
更改为true
,但当下一个像素再次为中性时,永远不会更改回false
。< / p>