Android Camera – ¿Cómo puedo tomar un "rectángulo" específico de la matriz de bytes?

He creado una aplicación que dispara y guarda fotos. Tengo una previsualización y una superposición encima de esa vista previa. La superposición define un cuadrado (el área alrededor del cuadrado muestra la vista previa un poco más oscura), como se puede ver en la imagen:

ejemplo

Lo que necesito hacer es extraer la parte de la imagen donde está el cuadrado. El cuadrado se define así:

Rect frame = new Rect(350,50,450,150); 

¿Cómo puedo hacer eso? Tengo la matriz de bytes (datos de byte []) que puedo guardar, pero quiero cambiar la aplicación para que sólo se guarde el área cuadrada.

Edit: He intentado lo siguiente:

 int[] pixels = new int[100000]; ByteArrayOutputStream bos = new ByteArrayOutputStream(); Bitmap bitmap = BitmapFactory.decodeByteArray(data , 0, data.length); bitmap.getPixels(pixels, 0, 480, 350, 50, 100, 100); bitmap = Bitmap.createBitmap(pixels, 0, 100, 100, 100, Config.ARGB_4444); bitmap.compress(CompressFormat.JPEG, 0, bos); byte[] square = bos.toByteArray(); 

Y luego escribir la matriz "cuadrado" a un nuevo archivo … El problema es que tengo una imagen hecha de líneas … hay un problema con la transformación que he hecho

    Me tomó un tiempo para averiguar que el código debería verse así:

     int[] pixels = new int[100*100];//the size of the array is the dimensions of the sub-photo ByteArrayOutputStream bos = new ByteArrayOutputStream(); Bitmap bitmap = BitmapFactory.decodeByteArray(data , 0, data.length); bitmap.getPixels(pixels, 0, 100, 350, 50, 100, 100);//the stride value is (in my case) the width value bitmap = Bitmap.createBitmap(pixels, 0, 100, 100, 100, Config.ARGB_8888);//ARGB_8888 is a good quality configuration bitmap.compress(CompressFormat.JPEG, 100, bos);//100 is the best quality possibe byte[] square = bos.toByteArray(); 

    Los datos de previsualización de la cámara vienen en formato YUV (específicamente ImageFormat.NV21), que BitmapFactory no admite directamente. Puede utilizar YuvImage para convertirlo en un mapa de bits como se describe aquí . La única diferencia es que usted querrá pasar un Rect correspondiente al cuadrado que desea al llamar a YuvImage.compressToJpeg.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.