2011-11-30 87 views
0

我的任务是“将图像读入像素图,然后将其转换为纹理贴图”。因此,只有像素图部分,听我说,并告诉我,如果我有正确的想法,如果有一个更简单的方法。我使用的库文件:http://www.imagemagick.org/Magick++/Documentation.html使用ImageMagic库将图像转换为像素图

读取图像:

Image myimage; 
myimage.read("myimage.gif"); 

我想这是我的pixmap需要阅读“形象”为:

GLubyte pixmap[TextureSize][TextureSize][3]; 

所以我想我需要一个循环,对于每个“像素映射”像素索引,从相应的“图像”像素索引中分配R,G,B值。我想循环体是这样的:

pixmap[i][j][0] = myimage.pixelColor(i,j).redQuantum(void); 
pixmap[i][j][1] = myimage.pixelColor(i,j).greenQuantum(void); 
pixmap[i][j][2] = myimage.pixelColor(i,j).blueQuantum(void); 

但我觉得上面的函数返回我需要GLubytes Quantum的,所以任何人都可以提供帮助吗?

- 或 -

也许我可以用OpenIL(这里文档:http://openil.sourceforge.net/tuts/tut_10/index.htm)照顾像素映射和纹理映射二者。想想我可以简单地按顺序调用它们吗?

ilutOglLoadImage(char *FileName); 
ilutOglBindTexImage(ILvoid); 

回答

1

您可以通过pixelColor(x,y)返回的量子值复制到ColorRGB,您将得到标准化(0.0,1.0)的颜色值。

如果你不需要坚持使用Magick ++,也许你可以尝试OpenIL,它可以加载和转换你的图像OpenGL纹理地图没有太多的麻烦。

+0

实际上,OpenIL看起来很简单。请看看我上面的编辑。这就是你要打的电话吗?我会尝试一下;如果它有效,这个答案会得到一个很大的检查。 – Rooster

+0

“只需使用要加载的文件名称调用ilutOglLoadImage,它就会直接将图像加载到OpenGL纹理中,然后删除所有不必要的本地数据。” (来自OpenIL手册)返回的GLuint是一个OpenGL纹理句柄。 – tbalazs

+0

除ilut.h外还有别的东西吗我必须#include?由于ilutRenderer(ILUT_OPENGL)有效,但iluOglLoadImage“未在此范围内声明” – Rooster