我试图使用QOpenGLWidget来显示一些图像,而不是使用QLabel。但是我对如何做到这一点感到困惑。
要使小部件完成工作,我知道我需要重新实现initializeGL()
方法和paintGL()
方法。
要获得图像的纹理,我使用的是SOIL_load_image()
。为什么unsigned char* img_data
胜过unsigned char* img_data[3]
?我认为图像的每个像素都有3个值( RGB )。
获取纹理后,我不知道在initializeGL()
或paintGL()
中应该做什么以及应该在哪里做。谁能告诉步骤?
void MyOpenGLWidget::loadTexture(const char* file_path)
{
*image = cv::imread(file_path, cv::IMREAD_COLOR);
width = image->rows;
height = image->cols;
int channels = image->channels();
img_data = SOIL_load_image(file_path, &width, &height, &channels, SOIL_LOAD_RGB);
}
答案 0 :(得分:3)
为什么未签名的char * img_data超过未签名的char * img_data [3]
unsigned char*
是指向数据缓冲区(任意长度)的指针。 unsigned char* …[3]
是指向数据缓冲区的3个指针的数组。您只有一个缓冲区,而不是3。
由于某种原因,您同时使用OpenCV和SOIL两次读取同一张图像。为什么?
加载图像后,要在OpenGL中显示它,
然后画画