- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 Android 上使用 onPreviewFrame(byte[] data, Camera camera)
。在 onPreviewFrame 中我做了一些图像处理。在 onPreviewFrame 内的某个点,我想停止预览(我通过 if 语句知道该点)并播放声音 - 也许是电话铃声。我想你不能在预览中播放声音。
如何退出 onPreviewFrame 以及在哪里添加播放声音的代码?
它在 Surface Destroyed 上吗?
这是我的代码:
public class MyCameraPreview extends Activity {
private Preview mPreview;
public TextView results;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Hide the window title.
requestWindowFeature(Window.FEATURE_NO_TITLE);
// Create our Preview view and set it as the content of our activity.
mPreview = new Preview(this);
setContentView(mPreview);
}
}
class Preview extends SurfaceView implements SurfaceHolder.Callback, PreviewCallback {
SurfaceHolder mHolder;
Camera mCamera;
public TextView results;
public TextView txt;
private Parameters parameters;
//this variable stores the camera preview size
private Size previewSize;
//this array stores the pixels as hexadecimal pairs
private int[] pixels;
public int[] argb8888;
Preview(Context context) {
super(context);
// Install a SurfaceHolder.Callback so we get notified when the
// underlying surface is created and destroyed.
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void surfaceCreated(SurfaceHolder holder) {
// The Surface has been created, acquire the camera and tell it where
// to draw.
mCamera = Camera.open();
try {
mCamera.setPreviewDisplay(holder);
//sets the camera callback to be the one defined in this class
mCamera.setPreviewCallback(this);
parameters = mCamera.getParameters();
parameters.setZoom(parameters.getMaxZoom());
mCamera.setParameters(parameters);
parameters = mCamera.getParameters();
previewSize = parameters.getPreviewSize();
pixels = new int[previewSize.width * previewSize.height];
} catch (IOException exception) {
mCamera.release();
mCamera = null;
// TODO: add more exception handling logic here
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
// Surface will be destroyed when we return, so stop the preview.
// Because the CameraDevice object is not a shared resource, it's very
// important to release it when the activity is paused.
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
// Now that the size is known, set up the camera parameters and begin
// the preview.
parameters.setPreviewSize(w, h);
//set the camera's settings
mCamera.setParameters(parameters);
mCamera.startPreview();
}
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
Do some image processing.
If condition == true {
Exit the preview and then play the ringtone and exit the application.
}
}
最佳答案
在预览中,您可以添加一个听者的定义,并使用它来不在预览中添加声音。
像这样:
public static interface OnPreviewListener {
void onImageMakeSound();
}
public void setListener(OnPreviewListener listener) {
this.listener = listener;
}
然后在你的 onPreviewFrame 方法中:
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
if (countFrame > 5) {
imageBytes = data;
countFrame = 0;
if (listener != null)
listener.onImageMakeSound();
}
countFrame++;
camera.addCallbackBuffer(data);
return;
}
在您的 Activity 中,必须实现 OnPreviewListener :
@Override
public void onImageMakeSound() {
alarmSoundOn();
}
关于android - 退出 onPreviewFrame 并通知用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14857026/
我是第一次在Android上编程,对java编程不是很熟悉。我试图通过互联网找到有关我的问题的一些答案,但没有找到任何解决方案。我希望你们中的一个能帮助我。我想做的是实时对摄像机应用一些图像处理并显示
我有以下方法来打开面向用户的相机: CameraOperations.java private Parameters parameters = null; private Ca
我正在尝试 lockCanvas() 因为我想在预览前修改相机图片。我在做onPreviewFrame。 代码在这里: public class MyPreview implements Camera
我正在开发一个相机应用程序,你需要提取每帧预览的一些数据,所以你尝试使用 onPreviewFrame 来完成,问题是我的代码 onPreviewFrame 只被调用一次,而在调试时我没有收到错误,所
我希望 LogCat 多次记录 #onPreviewFrame(),但它只适用于选定的设备,例如: 三星 Galaxy S6 (7.0) 三星 Galaxy S6 (6.0.1) LG 莱昂 (5.0
我的相机有问题。我想在 onPreviewFrame 中获取图片,但从未调用过。我打开了一个摄像头,设置了预览显示和预览回调但没有。我只是想了解我错在哪里。 public class VideoCal
我试图从从 onPreviewFrame 收到的原始字节中找到轮廓。当我们执行 setDisplayOrientation(根据 android 开发人员文档)时,这些接收到的原始字节不会旋转。单独旋
当使用 Camera.PreviewCallback 实现时,在初始化相机并开始预览 (Camera.startPrevew()) 后调用 onPreviewFrame 没有问题。问题是,如果我使用
我使用了setPreviewCallbackWithBuffer,并在onPreviewFrame()回调中获取了视频帧像素数据。字节数据为 YUV NV21 格式,并旋转了90度。我确实知道如何将预
我正在 Android 上使用 onPreviewFrame(byte[] data, Camera camera)。在 onPreviewFrame 中我做了一些图像处理。在 onPreviewFr
我正在为我正在制作的应用程序创建视频捕获 Activity ,我想捕获预览帧并用作播放按钮。我在 onCreate(...) 中设置了 SurfaceView 并在 SurfaceHolder.Cal
我正在尝试从相机预览中捕获帧,以便在用户看到相机预览时我可以对背景中的帧进行一些图像处理。 为此,我最初使用 SurfaceView 的 surfaceChanged() 方法中的 addCallba
我正在构建一个相机应用程序,它通过实现访问预览帧 android.hardware.Camera.PreviewCallback#onPreviewFrame(byte[] data, Camera
我想对来自相机的图像进行一些图像处理并将其显示在 SurfaceView 上,但我不知道如何修改相机框架。我尝试使用 setPreviewCallbackWithBuffer 和 onPreviewF
我正在使用 MediaRecorder 在我的 Android 应用程序中录制视频,我还希望通过 onPreviewFrame 回调来获取帧数据。 问题是:如果在 surfaceChanged 回调中
我开发了一个 android 应用程序,可以通过 TokBox 传输视频.我想录制流媒体视频。为此,我尝试使用 MediaRecorder样本。它在视频录制方面做得很好,但是我失去了我的流。有两个主要
在 previewframe 中,我得到了 ImageFormat.RGB_565 中的 byte[]。现在我想将这个 byte[] 转换为 int[],这样我就可以进行一些像素操作。 我该怎么做?
我正在尝试将预览帧从手机相机发送到平板电脑。在服务器应用程序中,我从 onPreviewFrame() 启动一个线程以建立一个 ServerSocket,该 ServerSocket 又启动另一个线程
在我的应用程序中我需要录制视频和音频并不重要。到目前为止,我使用的是 mediarecorder,但由于它的延迟,我决定更改它。经过一番搜索后,我了解到我可以从 onPreviewFrame 获取表面
我正在尝试获取字节数组并从那里复制到另一个数组,使用 onPreviewFrame() 预览一些图片行。所以我准备了相机和新的字节数组 try { if (cam !=
我是一名优秀的程序员,十分优秀!