Android Camera Preview - 仅拍摄部分屏幕数据

时间:2016-01-27 11:46:42

标签: java android android-camera

我只想从预览视频回调中获取部分屏幕数据,以减少进程的时间。问题是我只知道如何使用OnPreviewFrame拍摄整个屏幕:

@Override
public void onPreviewFrame(byte[] data, Camera camera) {
        myData = data;
        // +get camera resolution x, y
}

然后用这些数据得到图像:

private Bitmap getBitmapFromYUV(byte[] data, int width, int height)
{
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    YuvImage yuvImage = new YuvImage(data, ImageFormat.NV21, width, height, null);
    yuvImage.compressToJpeg(new Rect(0, 0, width, height), 100, out);

    byte[] imageBytes = out.toByteArray();
    Bitmap image = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length);

    return image;
}

然后我拍摄了我想拍摄的照片:

cutImage = Bitmap.createBitmap(image, xOffset, yOffset, customWidth, customHeight);

问题是我需要拍摄大量图像才能对其应用一些图像处理,这就是为什么我要减少获取图像所需的时间。我想立即获得裁剪后的图像,而不是整个屏幕然后裁剪它。有没有办法获取屏幕数据的一部分?

1 个答案:

答案 0 :(得分:1)

好的我终于找到了一些东西,我仍然记录了相机的所有数据但是当使用compressToJpeg时,我使用自定义Rect裁剪图片。也许在此之前还有更好的事情要做,但这仍然是一个很好的改进。以下是我的更改:

yuvImage.compressToJpeg(new Rect(offsetX, offsetY, sizeCaptureX + offsetX, sizeCaptureY + offsetY ), 100, out);