3

我已经通过 OpenGL ES 2.0 着色器对相机预览应用了一些效果。接下来,我要保存这些效果图(灰度、负片……)

我在 onDrawFrame() 中调用 glReadPixels(),根据从 opengl 帧缓冲区读取的像素创建位图,然后将其保存到设备存储中。

但是,这样,我只是“快照”了相机效果预览。换句话说,保存的图像分辨率(例如:800*480)与 Camera.PictureCallback 拍摄的图像(例如:1920 * 1080)不同。

我知道预览大小可以通过 setPreviewSize() 改变,但最终不能等于图片大小。

那么,是否可以使用 glsl 着色器直接对 Camera.PictureCallback 获取的图像进行后期处理?或者还有其他方法可以实现相同的目标?

任何建议将不胜感激。谢谢。

4

1 回答 1

0

贾斯汀,这是我关于setPreviewTexture() 的问题,而不是建议。如果您发送从 onPreviewFrame() 回调接收到的像素数据,它自然会受到支持的预览大小的限制。

您可以使用相同的逻辑将像素从 onPictureTaken() 推送到纹理,但您应该将它们从 JPEG 格式解码为 RGB。

于 2013-09-02T19:08:17.447 回答