16,472
社区成员
发帖
与我相关
我的任务
分享
// 函数本意应该是找出 data 中出现次数最多的值给 bg,出现第二多的值给 fg
// 如 data[] = { 1, 2, 3, 4, 1, 1, 2 } --> bg = 1, fg = 2
int func_1(BYTE* data, int w, int h, BYTE* bg, BYTE* fg)
{
int tileType = 0;
BYTE pix1 = *data, pix2 = 0;
int count1 = 0, count2 = 0;
BYTE end = data + w*h;
for (BYTE* ptr = data; ptr < end; ptr++)
{
if (*ptr == pix1)
{ // 这里在 loop 1 时恒成立
count1++;
continue;
}
if (count2 == 0)
{ // 这里成立时,表示碰到第一个不同的值(与data[0]值不同的第一个值)
tileType |= 0x01; // 含有两种以上的值
pix2 = *ptr; // 这里把第一个不同的值赋于 pix2
}
if (*data == pix2)
{ // 所以这里第一次执行时,恒不成立,count2不会变
count2++;
continue;
}
tileType |= 0x02;
break; // 接下来就 break 了,count2 恒为0
}
if (count1 >= count2)
{
*bg = pix1; *fg = pix2;
}
else
{
*bg = pix2; *fg = pix1;
}
return tileType;
}
count2++;
continue;
这两句永远不会被执行,岂不是说明代码自身就有问题?
if (count2 == 0)
{ // 这里成立时,表示碰到第一个不同的值(与data[0]值不同的第一个值)
tileType |= 0x01; // 含有两种以上的值
pix2 = *ptr;
}
if (*ptr == pix2)
{ // 所以这里第一次执行时,恒不成立,count2不会变
count2++;
continue;
}