使用libpng将图像“拆分”成段

时间:2011-01-26 04:46:29

标签: opengl libpng

我正在尝试使用libpng将图像拆分成不同的块。原因是我无法在当前正在处理的硬件上加载大于512x512的纹理。我之前使用SDL和SDL_Image混合完成了这个。我基本上使用SDL_BlitSurface中的srcrect参数来复制图像的一部分,然后我将其转换为OpenGL纹理。将它与水平的简单循环相结合然后垂直地我能够得到一个纹理数组,每个最大为512x512。然后,只需将它们渲染到正确的位置即可。

现在,我没有使用SDL的奢侈,所以我认为可以通过libpng直接自己做这件事。基于一些谷歌搜索,我认为这只是使用png_read_rows来读取我需要的部分。但那就是我被困住的地方,我不确定该怎么做。

另外,如果你想知道我为什么不在gimp / photoshop / paint中分割图像或其他什么,那是因为我不控制它们并且在运行时下载它们。

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

你不必搞乱提取瓷砖。您可以告诉OpenGL只使用您提供的数据的一部分来初始化纹理。关键字是glPixelStorei(GL_UNPACK ...)参数。假设您的输入图像具有维度img.widthimg.height,并且RGB像素有4个字节,即每个像素的一个字节填充,并且您的子图片由subimg.off_x定义,{{1} },subimg.off_ysubimg.width。然后你可以像这样加载它:

subimg.height