android读取屏幕rgb,android – 从SurfaceView显示Live相机获取RGB

我以为我可以从SurfaceView转换数据.但最好的方法是:

>将相机的方向设置为90度.

>将输出格式设置为NV21(所有设备均支持guranteed).

>设置为打开闪光灯.

>在SurfaceView中开始预览.

项目清单

camera = Camera.open();

cameraParam = camera.getParameters();

cameraParam.setPreviewFormat(ImageFormat.NV21);

camera.setDisplayOrientation(90);

camera.setParameters(cameraParam);

cameraParam = camera.getParameters();

camera.setPreviewDisplay(surfaceHolder);

cameraParam.setFlashMode(Parameters.FLASH_MODE_TORCH);

camera.setParameters(cameraParam);

camera.startPreview();

然后,我调用setPreviewCallback和onPreviewFrame来获取传入帧,并将其转换为RGB像素阵列.然后,我可以通过运行myPixels数组通过for循环平均所有像素强度来获得图片中每种颜色的强度,并检查每个所需颜色的Color.red(myPixels [i])(在onPreviewFrame内).

camera.setPreviewCallback(new PreviewCallback() {

@Override

public void onPreviewFrame(byte[] data, Camera camera) {

int frameHeight = camera.getParameters().getPreviewSize().height;

int frameWidth = camera.getParameters().getPreviewSize().width;

// number of pixels//transforms NV21 pixel data into RGB pixels

int rgb[] = new int[frameWidth * frameHeight];

// convertion

int[] myPixels = decodeYUV420SP(rgb, data, frameWidth, frameHeight);

}

}

其中decodeYUV420SP的编号为here.

我将这个操作计时为每帧约200ms.有更快的方法吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值