gpt4 book ai didi

android - onPreviewFrame 和异常锁定表面

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:49:29 29 4
gpt4 key购买 nike

我正在尝试 lockCanvas() 因为我想在预览前修改相机图片。我在做onPreviewFrame。

代码在这里:

public class MyPreview implements Camera.PreviewCallback {

@Override
public void onPreviewFrame(byte[] data, Camera camera) {
Log.d("Camera", "Got a camera frame");

Canvas c = null;

try {
c = mCamSH.lockCanvas(null);

Log.d("SOMETHING", "Got Bitmap");
} finally {
if (c != null) {
mCamSH.unlockCanvasAndPost(c);
}
}
}

} //public class MyPreview implements Camera.PreviewCallback

不幸的是,我总是在循环中遇到这个错误,问题出在 c = mCamSH.lockCanvas(null); :

E/SurfaceHolder﹕ Exception locking surface
java.lang.IllegalArgumentException
at android.view.Surface.lockCanvasNative(Native Method)
at android.view.Surface.lockCanvas(Surface.java:76)
at android.view.SurfaceView$4.internalLockCanvas(SurfaceView.java:831)
at android.view.SurfaceView$4.lockCanvas(SurfaceView.java:811)
at cz.mrp.camera.CamActivity$MyPreview.onPreviewFrame(CamActivity.java:100)
at android.hardware.Camera$EventHandler.handleMessage(Camera.java:773)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4517)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)
at dalvik.system.NativeStart.main(Native Method)

完整代码在这里:http://pastebin.com/WJs1kyfq

在 GT-S7562 设备上使用 Android 4.0.4。

我已经尝试在 StackOverflow 上搜索并使用了谷歌,但没有找到任何可以帮助我的东西。感谢您的宝贵时间!

最佳答案

你不能那样做。

Surface 不是缓冲区,它是生产者-消费者安排中的缓冲区队列。一次只能有一个生产者,那就是 Camera,所以你不能锁定 Surface 进行软件渲染。除非您的应用也是消费者,否则无法从 Surface 读回数据,因此无法使用您当前的安排修改框架。

解决此问题的最有效方法取决于您要执行的操作。如果您只想在预览上叠加层,您可以使用具有透明背景的自定义 View 来实现。如果要在将图像保存为静止图像之前对其进行修改,则在将其保存到磁盘之前还要修改单个静止帧。如果你想修改它用于视频录制,你可以使用一个 SurfaceTexture 作为预览目标(它在应用程序中同时为你提供生产者和消费者端),然后使用 GLES 修改图像。 Grafika中的“展示+抓拍” Activity 展示了后者。

另见 Android System-Level Graphics Architecture文档。

关于android - onPreviewFrame 和异常锁定表面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26759453/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com