当前位置: 首页 > 知识库问答 >
问题:

一种将输入转换为位图的有效方法

长孙朝明
2023-03-14

我必须使用Java将com.google.mlkit.vision.common.inputimage转换为android中等效的位图图像。现在我正在使用下面的代码。

// iImage is an object of InputImage
Bitmap bmap = Bitmap.createBitmap(iImage.getWidth(), iImage.getHeight(), Bitmap.Config.RGB_565);
bmap.copyPixelsFromBuffer(iImage.getByteBuffer());

上面的代码没有将输入转换为位图。谁能给我建议一下把输入转换成位图的有效方法。

共有1个答案

白文彬
2023-03-14

您可以从byteBuffer创建位图,可以通过调用方法getByteBuffer()来接收位图。下面是一段可以解决您问题的代码:将NV21格式字节缓冲区转换为位图的方法getBitmap():

@Nullable
  public static Bitmap getBitmap(ByteBuffer data, FrameMetadata metadata) {
    data.rewind();
    byte[] imageInBuffer = new byte[data.limit()];
    data.get(imageInBuffer, 0, imageInBuffer.length);
    try {
      YuvImage image =
          new YuvImage(
              imageInBuffer, ImageFormat.NV21, metadata.getWidth(), metadata.getHeight(), null);
      ByteArrayOutputStream stream = new ByteArrayOutputStream();
      image.compressToJpeg(new Rect(0, 0, metadata.getWidth(), metadata.getHeight()), 80, stream);

      Bitmap bmp = BitmapFactory.decodeByteArray(stream.toByteArray(), 0, stream.size());

      stream.close();
      return rotateBitmap(bmp, metadata.getRotation(), false, false);
    } catch (Exception e) {
      Log.e("VisionProcessorBase", "Error: " + e.getMessage());
    }
    return null;
  }

方法rotateBitmap():

private static Bitmap rotateBitmap(
      Bitmap bitmap, int rotationDegrees, boolean flipX, boolean flipY) {
    Matrix matrix = new Matrix();

    // Rotate the image back to straight.
    matrix.postRotate(rotationDegrees);

    // Mirror the image along the X or Y axis.
    matrix.postScale(flipX ? -1.0f : 1.0f, flipY ? -1.0f : 1.0f);
    Bitmap rotatedBitmap =
        Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);

    // Recycle the old bitmap if it has changed.
    if (rotatedBitmap != bitmap) {
      bitmap.recycle();
    }
    return rotatedBitmap;
  }

点击以下链接可以看到完整的代码:https://github.com/googlesamples/mlkit/blob/master/android/vision-quickstart/app/src/main/Java/com/google/mlkit/vision/demo/bitmaputils.Java

 类似资料:
  • 问题内容: 我将输入流从Web转换为位图时遇到问题。仅当输入图像类型为.BMP(位图)时,才会出现问题。在这种情况下: bitmapFactory.decodeStream返回null 。 有什么提示如何解决此问题,或者应该在哪里继续调试? 平台:Android(蜂窝) 问题答案: 谢谢@Amir指出日志。发现了一条线: 这似乎是一个普遍的问题。进行搜索后,我找到了解决方案。 我以前的代码: 起作

  • 问题内容: 在我的应用程序中,我想以字符串形式将位图图像发送到服务器,我想知道有多少种方法可以将位图转换为字符串。现在,我正在使用Base64格式进行编码和解码,它需要占用更多的内存。还有其他可能性以不同的方式做同样的事情,从而减少了内存消耗。现在我正在使用此代码。 问题答案: 这是将字符串转换为位图的相反过程,但字符串应为Base64编码

  • 上下文 我相信我已经搜索了足够的关于这个话题,但还没有找到答案。如果你们有什么答案,请帮忙。 > 我正在尝试将图像作为输出发送给来自的服务调用。 这就是我挣扎的地方。我不知道该怎么做。我还没有发布任何示例代码,因为服务器端的代码非常简单,而且我还没有服务器端的任何代码。 Android端的示例代码

  • 问题内容: 除了遍历所述集合的内容并将每个项目手动推入数组之外,是否有更有效的方法将HTMLCollection转换为数组? 问题答案: var arr = Array.prototype.slice.call( htmlCollection ) 使用“本地”代码将具有相同的效果。 编辑 由于这有很多观点,请注意(按@oriol的评论),以下更简洁的表达 实际上 等效: 但是,请注意@JussiR

  • 问题内容: 一个激励人的例子: 实施各种调度“策略”,对“作业”列表进行排序。 一种非常简单的策略是首先执行最短的作业(不考虑其权重/优先级)。 嗯,这种策略只不过是对job.length进行排序,因此让我们使用sort包。定义一个自定义类型,并实现sort.Interface … 好了,现在回到我们的简单策略… 嗯… 问题答案: 首先, 即使您使用like ,也看不到任何定义 。 我认为您的意思

  • 问题内容: 我正在尝试从Web服务器读取.json文件。 我从服务器接收到的JSON在http://jsonlint.com/上报告无效: 它显示以下测试结果: 在使用PHP解析之前,如何将其转换为VALID JSON? 问题答案: 所有键(preOpen,preClose等)都必须是字符串,因此它们需要用双引号引起来。 ===更新=== 如果您的Json-String无效,则可以使用以下脚本对其