Вы ошибаетесь в том, как array
размещается в памяти, как вы можете узнать, объявив img
перед циклом и добавив printf
во внутренний цикл:
printf("%ld %ld %u %u %u\n",x,y,pic.offset(x,y,0),pic.offset(x,y,1),pic.offset(x,y,2));
Это дает (на моем экране 1920x1200):
0 0 0 2304000 4608000
0 1 1920 2305920 4609920
0 2 3840 2307840 4611840
и т. Д., Указывая, что красные / зеленые / синие изображения хранятся «вместе» вместо трех компонентов цвета одного пикселя, смежногодруг друга.
Встроенные аксессоры CImg заставят ваш код работать:
pic(x,y,0) = red;
pic(x,y,1) = green;
pic(x,y,2) = blue;