【发布时间】:2011-01-10 22:23:42
【问题描述】:
我正在处理分配给我的项目的一些现有代码。
我已成功调用 glTexImage2D,如下所示:glTexImage2D(GL_TEXTURE_2D, 0, texture->format, texture->widthTexture, texture->heightTexture, 0, texture->format, texture->type, texture->data);
我想使用传递给glTexImage2D 的变量创建一个图像(最好是CGImage 或UIImage),但不知道是否可行。
我需要从 OpenGL 视图创建许多连续图像(每秒有很多)并将它们保存以供以后使用。
我应该能够使用我在glTexImage2D 中使用的变量创建CGImage 或UIImage 吗?
如果我应该可以,我应该怎么做?
如果不是,为什么我不能,你对我每秒多次保存/捕获我的 opengl 视图内容的任务有什么建议?
编辑:我已经使用苹果提供的glReadPixels等技术成功捕获了图像。我想要更快的东西,这样我每秒可以获得更多图像。
编辑:查看并添加来自 Thomson 的代码后,生成的图像如下:
图像与图像的外观非常相似,只是水平复制了约 5 次,并且下方有一些随机的黑色空间。
注意:视频(每一帧)数据是通过与 iPhone 的临时网络连接来的。我相信相机正在使用 YCbCr 色彩空间拍摄每一帧
编辑:进一步审查 Thomson 的代码 我已将您的新代码复制到我的项目中,结果得到了不同的图像:
宽度:320 高度:240
我不确定如何找到纹理-> 数据中的字节数。它是一个空指针。
编辑:格式和类型
texture.type = GL_UNSIGNED_SHORT_5_6_5
texture.format = GL_RGB
【问题讨论】:
-
字节数为:int length = width * height * channels;这仅适用于每种颜色的 8 位。找出纹理->格式和纹理->类型是什么。如果您获取十六进制值并搜索 opengl.org 的文档,您应该能够准确地找出您的数据是什么;有多少通道(RGB 或 RGBA)以及您是否发送无符号字节(很可能)
-
嗨,binny,GL_UNSIGNED_SHORT_5_6_5 是非常重要的信息,很高兴知道。当我有时间时,我会在这里发布如何将其解压缩为可用于我在下面提供的 UIImage 代码的格式。
标签: objective-c cocoa-touch ios opengl-es