80,351
社区成员
发帖
与我相关
我的任务
分享
// 【获取视频预览帧的接口】
Camera.PreviewCallback mJpegPreviewCallback = new Camera.PreviewCallback()
{
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
// 传递进来的data,默认是YUV420SP的
// TODO Auto-generated method stub
Log.i("DEBUG", "going into onPreviewFrame size = " + data.length + ", height = " + mPreviewHeight + ", width = " + mPreviewWidth + ", busy = " + (mBusy?"yes":"no"));
if( mBusy ) return;
mBusy = true;
byte[] tmp = new byte[data.length];
System.arraycopy(data, 0, tmp, 0, data.length);
Message msg = new Message();
msg.what = 3721;
msg.obj = tmp;
handler.sendMessage(msg);
} // endonPriview
};
private void myHandleMessage(Message msg) {
if(msg.what == 3721) {
byte[] data = (byte[]) msg.obj;
try {
final YuvImage image = new YuvImage(data, ImageFormat.NV21, mPreviewWidth, mPreviewHeight, null);
ByteArrayOutputStream os = new ByteArrayOutputStream(data.length);
if(image.compressToJpeg(new Rect(0, 0, mPreviewWidth, mPreviewHeight), 100, os)) {
byte[] tmp = os.toByteArray();
Bitmap bmp = BitmapFactory.decodeByteArray(tmp, 0, tmp.length);
mImageView.setImageBitmap(bmp);
mImageView.bringToFront();
}
mBusy = false;
} catch (Exception e) {
Log.v("System.out", e.toString());
} // endtry
}
}
if( mBusy ) return;
mBusy = true;
如果只取预览开始的第一帧,可能有问题,估计是camera在初始化,图像还不是很清晰
我建议通过按钮来获取某一帧图画
用个标志位,按下按钮就为true,截取一帧后变为false……这样的笨方法,试试