Получение кадра предварительного просмотра камеры из API камеры 2 вида с поверхности

Я пытался получить кадр предварительного просмотра камеры в течение дня, используя camera2 api, но безуспешно. Я нашел несколько решений, но не смог их реализовать. Так что, если кто-нибудь может дать простой и понятный способ реализации, это было бы здорово.


person Ayush Malviya    schedule 14.06.2019    source источник
comment
Решил ли мой ответ вашу проблему или мне нужно его обновить?   -  person Jasurbek    schedule 25.06.2019


Ответы (1)


Прежде всего, вы должны установить целевую поверхность, чтобы получить с нее изображение.

mCaptureRequestBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);

imageReader =  ImageReader.newInstance(currentWidth, currentHeight, ImageFormat.JPEG, MAX_IMAGES);

List<Surface> outputSurfaces = new ArrayList<>();

outputSurfaces.add(imageReader.getSurface()); // here add as many surface as you want
mCaptureRequestBuilder.addTarget()//this function allow you to set targets

и этот обратный вызов позволяет вам извлекать кадры

readerListener = new ImageReader.OnImageAvailableListener() {
                @Override
                public void onImageAvailable(ImageReader reader) {

                  image = reader.acquireLatestImage();
                if(image == null){
                    //System.out.println("it is null image"); // image reader did not get new image
                    return;
                }
                Image.Plane[] planes = image.getPlanes();
                  if(planes[0].getBuffer() == null){ // here 0 indicates first target I set in outputSurfaces list
                      System.out.println("it is null object reference of planes");
                    return;
                  }
                 //.... do whatever you want here

                //After you are done with an image then close it 
               image.close(); 

               }
}

Полный пример см. В примерах Google

person Jasurbek    schedule 14.06.2019