gpt4 book ai didi

android - 将 OpenCV 图像(或位图)从服务发送到 Activity (SurfaceView)

转载 作者:太空狗 更新时间:2023-10-29 14:22:59 25 4
gpt4 key购买 nike

我正在开发一个 Android 应用程序,它安装了一个服务,可以做一些持续且昂贵的处理(它利用 OpenCV 抓取相机图像并对其进行一些处理)。我希望我的 Activity 连接和断开连接从服务在设备上做其他事情并查看处理(主要用于调试,但我也可以看到其他用例)。

问题是我不确定如何设计这个应用程序——我对 Android 编程也很陌生。

因为它是一个性能关键的应用程序,我想我不能从中传递位图 Activity 的服务,所以我想我想将 SurfaceView 耦合到Activity 到达前台后立即服务。

类似下面的内容 - 注意:它不是一个完整的示例,它只是显示流程

public class MainActivity extends Activity {
private OpenCVCameraService mService;
private SurfaceView mSurfaceView;
@Override
public void onCreate() {
// show UI
// start mService with mSurfaceView
}
}

public class OpenCVCameraService extends Service {
private Processing mProcessing;
private SurfaceView mSurfaceView;
@Override
public void onCreate() {
// setup OpenCV camera stuff
// init mProcessing with mSurfaceView
}
}

public class Processing extends Thread {
private VideoCapture mCamera;
private SurfaceView mSurfaceView; // maybe just the SurfaceHolder
Processing(VideoCapture camera, SurfaceView surfaceView) {
mCamera = camera;
mSurfaceView = surfaceView;
}
@Override
public void run() {
mCamera.grab();
mCamera.retrieve(...);
// process retrieved images
// image to bitmap
// What now, how to get bitmap to MainActivity? Passing using intent is a performace hit I guess
// maybe something like if (mSurfaceView != null) { Canvas canvas = mSurfaceView.lockSurface(); ... }
}
}

您将如何设计这样的应用程序?还有什么我需要考虑的吗?

最佳答案

好的,我是这样做的:我在 MainActivity 的 onServiceConnected/onServiceDisconnected 中将 SurfaceView 设置为正确的 View (如果应用程序正在运行),如果没有(即暂停)则设置为 null。在服务中,我检查 View 是否存在。这不是最好的解耦,但它确实有效,据我所知,性能还不错。

关于android - 将 OpenCV 图像(或位图)从服务发送到 Activity (SurfaceView),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15075666/

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