>>25
49行目
> graydata[i][j] = (data[i][j].r + data[i][j].g + data[i][j].b)/3;
なんだけど、.r .g .b は unsigned char だから、桁あふれ防止のため
> graydata[i][j] = data[i][j].r / 3 + data[i][j].g / 3 + data[i][j].b / 3;
とした方が良いと思う。