Мне нужно преобразовать QImage в массив, где каждый пиксель представлен тремя целыми числами (каналами). Итак, я пытаюсь добиться этого с помощью кода заполнения:
void Processor::init(QImage *image){
QColor* c = new QColor();
int i,j;
int local_ind;
x = image->width();
y = image->height();
if(this->img!=NULL)
delete [] this->img;
this->img = new int[ x * y * 3];
for( i = 0 ; i < y ; i++ )
for( j = 0 ; j < x ; j++ ){
c->setRgb(image->pixel(j, i));
local_ind = i * x + j * 3;
this->img[local_ind + 0] = c->red();
this->img[local_ind + 1] = c->green();
this->img[local_ind + 2] = c->blue();
}
delete c;
}
void Processor::flush(QImage *image){
QColor* c = new QColor();
QRgb color;
int i, j;
int local_ind;
for( i = 0 ; i < y ; i++ )
for( j = 0 ; j < x ; j++ ){
local_ind = i * x + j * 3;
color = qRgb(this->img[local_ind + 0],
this->img[local_ind + 1],
this->img[local_ind + 2]);
image->setPixel(j, i, color);
}
delete c;
}
Обе функции, похоже, работают нормально, как я могу видеть через отладчик, но когда я вызываю их одну за другой (просто копирую информацию из QImage в массив и обратно), результат получается немного странным. Полное изображение состоит из трех повторяющихся изображений: треть исходного изображения (синий, зеленый и красный каналы исходного изображения). Думаю, я просто неправильно использовал setPixel, поэтому формат QImage не соблюдается или что-то в этом роде.
Я использую формат QImage RGB32, если это действительно важно.
PS. Извините за мой английский, поправки приветствуются)
QImage ( uchar * data, int width, int height, Format format )
иconst uchar * QImage::constBits () const
- person kfunk   schedule 12.02.2013