2016-01-27 50 views
1

我只想從預覽視頻回調中只取一部分屏幕數據,以縮短處理時間。該probleme是我只知道如何利用整個屏幕OnPreviewFrame:Android相機預覽 - 僅拍攝一部分屏幕數據

@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

好吧,我終於找到了一些東西,我仍然記錄相機的所有數據,但是當使用compressToJpeg時,我會用自定義的Rect裁剪圖片。也許在此之前有更好的做法,但這仍然是一個很好的改進。這裏是我的改變:

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