我在装纹理的时候出了问题。
以下是一种工作方式:
Works
QImage t = QImage("/home/renaud/Desktop/img.jpg",0); //LOAD IMAGE
t.convertToFormat(QImage::Format_RGBA8888, Qt::AutoColor); //CONVERT TO RGBA
t = t.mirrored(); //MIRROR
t.save("image2.jpg", 0, -1); //IMAGE SEEMS FINE
glBindTexture(GL_TEXTURE_2D, tex);
glTexImage2D(GL_TEXTURE_2D, 0, 3, t.width(), t.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, t.bits());
glBindTexture( GL_TEXTURE_2D, 0);
我保存图像只是为了检查,一切都很好。
现在,我尝试从缓冲区加载一个图像,比如,当我用glTexImage2D
加载它时,它会崩溃。以下是代码:
Crashes
QImage img = QImage(<Buffer containing the data>, 1920, 1080, QImage::Format_RGB888);
img.convertToFormat(QImage::Format_RGBA8888, Qt::AutoColor);
QImage t = img.mirrored();
t.save("image2.jpg", 0, -1); //IMAGE SEEMS FINE
glBindTexture(GL_TEXTURE_2D, tex);
glTexImage2D(GL_TEXTURE_2D, 0, 3, t.width(), t.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, t.bits());
glBindTexture( GL_TEXTURE_2D, 0);
所以在第二种情况下,我保存图像之前,我可以检查它,图像是完美的。
你知道为什么它会在glTexImage2D
上崩溃,因为当我保存它的时候,图像看起来很好吗?
编辑:
如果我将GL_RGBA
更改为GL_RGB
,即使在保持QImage转换在RGBA上时,问题也得到了解决。为什么?
发布于 2016-08-04 15:31:10
QImage::convertToFormat
返回转换后的新图像,但不要修改图像本身。
使用:
img = img.convertToFormat(QImage::Format_RGBA8888, Qt::AutoColor);
https://stackoverflow.com/questions/38770190
复制相似问题