我只想从预览视频回调中获取部分屏幕数据,以减少进程的时间。问题是我只知道如何使用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);
问题是我需要拍摄大量图像才能对其应用一些图像处理,这就是为什么我要减少获取图像所需的时间。我想立即获得裁剪后的图像,而不是整个屏幕然后裁剪它。有没有办法获取屏幕数据的一部分?
答案 0 :(得分:1)
好的我终于找到了一些东西,我仍然记录了相机的所有数据但是当使用compressToJpeg时,我使用自定义Rect裁剪图片。也许在此之前还有更好的事情要做,但这仍然是一个很好的改进。以下是我的更改:
yuvImage.compressToJpeg(new Rect(offsetX, offsetY, sizeCaptureX + offsetX, sizeCaptureY + offsetY ), 100, out);