Android студия конвертирует растровое изображение из вида изображения в байтовый массив из рамки предварительного просмотра камеры - PullRequest
0 голосов
/ 13 апреля 2020

Я работаю в Android Studio. Я пытаюсь выяснить некоторый код, который я получил из учебника. Следующий метод является частью действия камеры. Когда камера направлена ​​на объект, этот метод сработает, и я думаю, что изображение на экране камеры передается методу в виде байтового массива (называемого байтами). Этот байтовый массив имеет длину 460800.

Я пытаюсь повторить метод, описанный ниже, и другие, которые следуют, используя растровое изображение stati c, загруженное в представление изображения (код ниже), а не предварительный просмотр, полученный с камеры. Мой вопрос состоит в том, как мне получить мое растровое изображение (из вида изображения), чтобы оно выглядело как байтовый массив, переданный этому методу (с числом байтов 460800 в длину). Другими словами, я пытаюсь, чтобы мое растровое изображение было похоже на изображение, которое сделала бы камера?

 /** Callback for android.hardware.Camera API */
  @Override
  public void onPreviewFrame(final byte[] bytes, final Camera camera) {

    Log.d("mmmmm", "onPreviewFrame: " + bytes.length);

    if (isProcessingFrame) {
      LOGGER.w("Dropping frame!");
      return;
    }

    try {

      // Initialize the storage bitmaps once when the resolution is known.
      if (rgbBytes == null) {

        Camera.Size previewSize = camera.getParameters().getPreviewSize();
        previewHeight = previewSize.height;
        previewWidth = previewSize.width;
        rgbBytes = new int[previewWidth * previewHeight];
        onPreviewSizeChosen(new Size(previewSize.width, previewSize.height), 90);

      }

    } catch (final Exception e) {
      LOGGER.e(e, "Exception!");
      return;
    }

    isProcessingFrame = true;
    yuvBytes[0] = bytes;
    yRowStride = previewWidth;

    imageConverter =
        new Runnable() {
          @Override
          public void run() {
            ImageUtils.convertYUV420SPToARGB8888(bytes, previewWidth, previewHeight, rgbBytes);
          }
        };

    postInferenceCallback =
        new Runnable() {
          @Override
          public void run() {
            camera.addCallbackBuffer(bytes);
            isProcessingFrame = false;
          }
        };

    processImage();

  }

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

// converts image from image view to bitmap
BitmapDrawable drawable = (BitmapDrawable) imgUpload.getDrawable();
Bitmap bitmap = drawable.getBitmap();
...