Страницы

Поиск по вопросам

воскресенье, 24 ноября 2019 г.

Работа с камерой в Android


Для камеры есть коллбеки задания превью, получения картинки, но не понятно одно
у меня есть изображение в камере — делаю тач по какой-либо области — нужно получить область тача (цвет или хотя бы байты с данными).
Каким образом?

UPD:
Возникла проблема с получением картинки с канваса.
Делаем так:

Canvas canvas = mHolder.lockCanvas(mHolder.getSurfaceFrame());


А что дальше - непонятно.

Про канву можно забыть. Массив с изображением мы получаем из коллбека превьюшки для камеры, но получаем всегда null и нагугливаем этот вопрос.

Использую метод так:

Camera.Size camSize = camera.getParameters().getPictureSize();
int[] outBuff = new int[camSize.width * camSize.height];
decodeYUV(outBuff, data, camSize.width, camSize.height);
Log.d(TAG, "int[]=" + Arrays.toString(outBuff));


В лог ничего не выводится.

Итого:
Нужно по тачу в превью камеры получить область изображения (в байтах). То есть, делаем тач — получаем кусок картинки на которой был сделан тач.
    


Ответы

Ответ 1



Можно использовать YuvImage: @Override public void onPreviewFrame(byte[] data, Camera camera) { Camera.Size previewSize = camera.getParameters().getPreviewSize(); YuvImage yuvImage = new YuvImage(data, ImageFormat.NV21, previewSize.width, previewSize.height, null); ByteArrayOutputStream baos = new ByteArrayOutputStream(); Rect rect = new Rect(0, 0, previewSize.width, previewSize.height); yuvImage.compressToJpeg(rect, 100, baos); byte[] bytes = baos.toByteArray(); Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); // дальше можно получить область касания someImageView.setImageBitmap(Bitmap.createBitmap(bitmap, tapRegionX, tapRegionY, tapRegionWidth, tapRegionHeight)); }

Комментариев нет:

Отправить комментарий