Я пытаюсь построить QImages из данных, сохраненных в виде 16-разрядных целых чисел в двоичном файле. Я могу нормально загрузить данные, но моя программа не работает, когда я использую функцию QImage :: loadFromData (QBytearray ba) (возвращает false) следующим образом:
QBytearray frame;
QImage pic = QImage(256, 256, QImage::Format_RGB888);
for(int i = 0; i < height; i++) {
for(int j = 0; j < width; j++) {
// Access value of pixel at each location
datum = store[i][j];
for(int c = 0; c < 3; c++) {
// Calculate colour at given pixel
col = (255.0f * ((float)datum - (float)min) / ((float)(max - min)));
// Assign colour value to the pixel
frame[c+3*j+3*i*width] = ((unsigned char)col);
}
}
}
pic.loadFromData(frame);
Я переназначил это из кода Java, который я ранее написал, который работал отлично, как задумано (из тех же самых данных):
BufferedImage image = = new BufferedImage(256, 256, BufferedImage.TYPE_3BYTE_BGR);
byte[] data = image.getRaster().getDataBuffer();
for (j=0; j<height; j++) {
for (i=0; i<width; i++) {
//Find value of the pixels at the location
datum=data[j][i];
for (c=0; c<3; c++) {
//Calculate the colour at the given pixel
col=(255.0f*((float)datum-(float)min)/((float)(max-min)));
//Assign the colour value to the pixel
data[c+3*i+3*j*width] = (byte)col;
}
}
}
Кто-нибудь может помочь мне понять, где я понимаю это неправильно? Я был в тупике в течение нескольких дней, и у меня нет идей.
Хорошо, если вы на самом деле пытаетесь установить значения RGB для отдельных пикселей, после прочтения QImage детали, Я вижу, вы можете сделать это, используя следующее:
value = qRgb(189, 149, 39); // 0xffbd9527
image.setPixel(1, 1, value);
Итак, что-то вроде:
QImage pic = QImage(256, 256, QImage::Format_RGB888);
QRgb value;
int r,b,g;
for(int i = 0; i < height; i++) {
for(int j = 0; j < width; j++) {
// Access value of pixel at each location
datum = store[i][j];
//I get really confused what is going on here... you don't seem to be actually using `c` for the calculation?
for(int c = 0; c < 3; c++) { //let's just pretend you set the ints r,b,g in here somewhere
// Calculate colour at given pixel
col = (255.0f * ((float)datum - (float)min) / ((float)(max - min)));
}
// Assign colour value to the pixel
value = qRgb(r, g, b);
pic.setPixel(i, j, value);
}
}
Других решений пока нет …