Android Camera - How can i take a specific “rectangle” from the byte array?

前端 未结 2 428
情话喂你
情话喂你 2020-12-30 10:07

I have created an application that shoots and saves photos. I have a preview and an overlay on top of that preview. The overlay defines a square (the area around the square

相关标签:
2条回答
  • 2020-12-30 10:31

    The camera preview data comes in YUV format (specifically ImageFormat.NV21), which BitmapFactory doesn't support directly. You can use YuvImage to convert it to a Bitmap as described here. The only difference is that you'll want to pass a Rect corresponding to the square that you want when calling YuvImage.compressToJpeg.

    0 讨论(0)
  • 2020-12-30 10:36

    It took me some time to figure out that the code should look like this:

    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();
    
    0 讨论(0)
提交回复
热议问题