У меня есть QImage, который я построил из растрового изображения примерно так:
QPixmap fullPmap = topItem->pixmap();
fullPmap = fullPmap.copy(isec.toRect());
QImage chip = fullPmap.toImage();
Это в основном пересекается с прямоугольником на экране, чтобы обрезать изображение до размера сколов.
Теперь мне нужно получить массив символов, представляющих эти данные, из чипа.
Как я могу это сделать?
Я пробовал что-то вроде этого:
unsigned char * data = chip.bits();
И когда я отображаю «данные», я получаю полностью искаженное изображение, не похожее на мой настоящий чип.
fullPmap - это изображение RGB, если это имеет значение. У меня есть код, который я использую для преобразования его в оттенки серого:
QRgb col;
int gray;
for (int i = 0; i < chip.width(); ++i)
{
for (int j = 0; j < chip.height(); ++j)
{
col = chip.pixel(i, j);
gray = qGray(col);
chip.setPixel(i, j, qRgb(gray, gray, gray));
}
}
Что мне не очень нравится, но мне показалось, что это самый простой способ сделать это.
Отображение данных, возвращаемых из битов (), выглядит следующим образом:
imwidth = chip.width();
imheight = chip.height();
QImage *qi = new QImage(imwidth, imheight, QImage::Format_RGB32);
// #pragma omp parallel for
for (int i = 0 ; i < imheight ; i++)
for (int j = 0 ; j < imwidth ; j++)
{
qi->setPixel(j,i,qRgb(data[i*imwidth + j],data[i*imwidth + j],data[i*imwidth + j]));
}