我有一个简单的双用于将rgb图像转换为灰度,但我在使用VS编译器的Windows上有一些奇怪的行为。 我注意到我的两个实现有不同的结果。 第一个:
int ok = 0, nok = 0;
for(int y = 0; y < img.height(); y++){
uchar *line = img.getLine(y);
for(int x = 0; x < img.width(); x++){
*(destinationPtr++) = ((*(line++)) + (*(line++)) + (*(line++)))/3;
}
}
第二个:
int ok = 0, nok = 0;
for(int y = 0; y < img.height(); y++){
uchar *line = img.getLine(y);
for(int x = 0; x < img.width(); x++){
uchar r = *(line++);
uchar g = *(line++);
uchar b = *(line++);
*(destinationPtr++) = (r+g+b)/3;
}
}
经过几次测试后,我认为在我的第一个实现中出现问题,代码是用这个命令执行的:
*(destinationPtr) = ((*(line)) + (*(line)) + (*(line)))/3;
destinationPtr++;
line++;
line++;
line++;
在我与GCC的Linux编译中我没有这个问题,你有这个原因吗?后增量不是标准的东西吗?