我已经通过OpenGL ES 2.0着色器对相机预览应用了一些效果。 接下来,我想保存这些效果图片(灰度,负片......)
我在onDrawFrame()中调用glReadPixels(),根据我从opengl帧缓冲区读取的像素创建一个位图,然后将其保存到设备存储中。
但是,通过这种方式,我只对“快照”相机效果进行预览。换句话说,保存的图像分辨率(例如:800 * 480)与Camera.PictureCallback(例如:1920 * 1080)拍摄的图像不同。
我知道setPreviewSize()可以更改预览大小,但最终不能等于图片大小。
那么,是否可以使用glsl着色器直接通过Camera.PictureCallback来发布处理过程?或者还有另一种方法可以达到同样的目标?
任何建议都将不胜感激。 感谢。
答案 0 :(得分:0)
贾斯汀,这是关于setPreviewTexture()的问题,而不是建议。如果您发送从onPreviewFrame()回调收到的像素数据,它自然会受到支持的预览尺寸的限制。
您可以使用相同的逻辑将像素从onPictureTaken()推送到纹理,但您应该将它们从JPEG格式解码为RGB。