Cámara de Android: ¿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 vista previa 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 puede ver en la imagen:

ejempl

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 bytes []) que puedo guardar, pero quiero cambiar la aplicación para que solo 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 escriba el conjunto "cuadrado" en un nuevo archivo ... El problema es que obtengo una imagen hecha de líneas ... hay un problema con la transformación que hice

Respuestas a la pregunta(4)

Su respuesta a la pregunta