Я пытаюсь запустить мое приложение QT через VNC, и я вижу некоторые различия.
Мои изображения загружаются в элементы QImage и являются изображениями RGB.Я хочу работать только с изображениями в градациях серого, поэтому я попытался создать изображение в градациях серого следующим образом:
QRgb col;
int gray;
for (int i = 0; i < imwidth; ++i)
{
for (int j = 0; j < imheight; ++j)
{
col = chip.pixel(i, j);
gray = qGray(col);
chip.setPixel(i, j, qRgb(gray, gray, gray));
}
}
, где chip - это мой QImage
Затем, чтобы получить необработанные данные чипаЯ использую следующее:
int chipDataLength = chip.bytesPerLine();
qDebug("Chip Width: %i", imwidth);
qDebug("Chip height: %i", imheight);
qDebug("Bytes per line : %i",chipDataLength);
int bpp = chipDataLength/imwidth;
qDebug("Size uchar: %i", sizeof(unsigned char) );
qDebug("Size of qRgb: %i", sizeof(qRgb(1,1,1)));
unsigned char * tempData = (unsigned char *)malloc(imheight*chipDataLength*sizeof(unsigned char));
unsigned char * oneBandData = (unsigned char *)malloc(imheight*imwidth*sizeof(unsigned char));
tempData = chip.bits();
for (int i = 0; i < imheight; i++)
{
for (int j = 0; j < imwidth; j++)
{
oneBandData[i*imwidth+j] = tempData[i*chipDataLength + j*bpp];
}
}
Когда я запускаю этот код по SSH-соединению (или просто на сервере), код работает нормально, и в oneBandData есть ожидаемые значения.Когда я пытаюсь запустить его через VNC, oneBandData неверен!
Я пытался использовать растр параметров -qgraphicssystem, но он все равно дает мне искаженное изображение.
Кроме того, этот bppбыла добавлена переменная, потому что chipDataLength получала 4 * imwidth на SSH и 2 * imwidth на VNC.Почему это отличается?Что я могу сделать, чтобы этот код работал в обоих направлениях?