我尝试使用lodepng(http://lodev.org/lodepng/)加载png图像并使用openGl进行绘制,但我收到错误,我认为我正在尝试访问无法访问的矢量id。但我不知道为什么。
主要代码:
#include <iostream>
#include <glut.h>
#include <vector>
#include "lodepng.h"
using namespace std;
std::vector<unsigned char> img;
unsigned w, h;
void decodeOneStep(const char* filename)
{
std::vector<unsigned char> image;
unsigned width, height;
//decode
unsigned error = lodepng::decode(image, width, height, filename);
cout << "w: " << width << " " << "h: " << height << endl;
//if there's an error, display it
if (error) std::cout << "decoder error " << error << ": " << lodepng_error_text(error) << std::endl;
else
{
img = image;
w = width;
h = height;
cout << "Success" << endl;
}
}
void display(void)
{
/* clear all pixels */
glClear (GL_COLOR_BUFFER_BIT);
glRasterPos2i(0,0);
glDrawPixels(w,h, GL_RGBA, GL_UNSIGNED_INT, &img);
glFlush ();
}
void init (void)
{
/* select clearing (background) color */
glClearColor (0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
decodeOneStep("eleTest.png");
cout << img->size();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (800, 800);
glutInitWindowPosition (300, 0);
glutCreateWindow ("hello");
init ();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
答案 0 :(得分:4)
您的数据似乎与glDrawPixels
std::vector<unsigned char> img;
glDrawPixels(w,h, GL_RGBA, GL_UNSIGNED_INT, &img);
img每个通道包含1个字节的数据,但告诉OpenGL每个通道应读取4个字节(一个整数)。尝试将GL_UNSIGNED_INT切换为GL_UNSIGNED_BYTE。
由于我不知道导入程序库:您必须确保图像确实具有Alpha通道。否则你可能会遇到类似的问题。
请注意,&img
不一定是向量中第一个元素的地址。您至少应该使用&img[0]
,如LodePNG的opengl示例中所示。