Для камеры есть коллбеки задания превью, получения картинки, но не понятно одно
у меня есть изображение в камере — делаю тач по какой-либо области — нужно получить область тача (цвет или хотя бы байты с данными).
Каким образом?
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));
}
Комментариев нет:
Отправить комментарий