Android: Как получить байтовый массив в градациях серого из ImageCapture на CameraX? - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь получить массив байтов в градациях серого из сценария использования CameraX ImageCapture в Android java. До сих пор я пытался преобразовать массив байтов, полученный в onCaptureSuccess, но безуспешно. Удивительно, но не так много документации об этом процессе. Формат, возвращаемый Image.getFormat() - JPEG. Android Документация только пишет, что это единственная плоскость, "Сжатые данные, поэтому шаги строк и пикселей равны 0. Чтобы распаковать, используйте BitmapFactory # decodeByteArray". При поиске JPEG можно преобразовать в оттенки серого, извлекая компонент Y, как предполагает в этом сообщении . Но ничего на , как на самом деле извлечь этот компонент. Я пытался создать новый массив байтов, используя один элемент из трех, но безуспешно. В конечном итоге я закончил преобразование байтового массива в битовый массив:

                    Bitmap originalBitmap = BitmapFactory.decodeByteArray(originalByteArray, 0, originalByteArray.length);
                    Bitmap grayScaleBitmap = Bitmap.createBitmap(originalBitmap.getWidth(), originalBitmap.getHeight(), Bitmap.Config.ARGB_8888);
                    Canvas canvas = new Canvas(grayScaleBitmap);
                    Paint paint = new Paint();
                    ColorMatrix colorMatrix = new ColorMatrix();
                    colorMatrix.setSaturation(0);
                    ColorMatrixColorFilter colorMatrixColorFilter = new ColorMatrixColorFilter(colorMatrix);
                    paint.setColorFilter(colorMatrixColorFilter);
                    canvas.drawBitmap(originalBitmap, 0, 0, paint);
                    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
                    grayScaleBitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
                    byte[] grayScaleArray = byteArrayOutputStream.toByteArray();

, который работает, но требует ненужных вычислений. Какие операции требуются для непосредственного преобразования исходного байтового массива в оттенки серого? Как упоминалось ранее, это единственный плоский байтовый массив, который выглядит следующим образом:

[-1, -40, -1, -31, -91, 95, 69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, ...]

Любая помощь в понимании того, как это работает, будет приветствоваться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...