(data[i][j].r + data[i][j].g + data[i][j].b) / 3
は内部的に intで計算しているのか、桁溢れしないのかな。
ttp://ideone.com/XlUeoA