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

将Java的BufferedImage输出转换为Android中的位图

狄望
2023-03-14

上下文

我相信我已经搜索了足够的关于这个话题,但还没有找到答案。如果你们有什么答案,请帮忙。

>

  • 我正在尝试将图像作为输出发送给来自Android应用程序的服务调用。

    这就是我挣扎的地方。我不知道该怎么做。我还没有发布任何示例代码,因为服务器端的代码非常简单,而且我还没有服务器端的任何代码。

    Android端的示例代码

        private Bitmap getBitmap() {
            String base64String="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";
            ByteArrayInputStream imageArr=new ByteArrayInputStream(Base64.decode(base64String, Base64.DEFAULT));
            Bitmap bitmap = BitmapFactory.decodeStream(imageArr);
            return bitmap;
        }
    
  • 共有1个答案

    晋弘义
    2023-03-14

    @Haraldk,谢谢你给了我正确的指针。我也在想,为什么我没有看到任何填充,但没有把足够的重点放在它来理解这个问题。但是,根据你的提示,我终于弄明白了问题所在。问题是我没有正确关闭Base64编码器提供的OutputStream。在我的代码中,我有一个Base64编码器流作为ByteArrayOutputStream的包装,如下所示:

     final ByteArrayOutputStream os = new ByteArrayOutputStream();
     String qString = "";
     try {
         MatrixToImageWriter.writeToStream(html" target="_blank">matrix, formatName, Base64.getEncoder().wrap(os));
         qString = os.toString("UTF-8");
         os.close();
    
         return qString;
     } catch (final IOException ioe) {
            throw new UncheckedIOException(ioe);
     }
    

    在上面的代码中,我使用os.close()关闭了ByteArrayOutputStream,这不是必需的。但所需要的是关闭Base64编码器提供的OutputStream。我如下所示更改了代码以使其正常工作:

        final ByteArrayOutputStream os = new ByteArrayOutputStream();
        OutputStream base64Stream = Base64.getEncoder().wrap(os);
        String qString = "";
        try {
            MatrixToImageWriter.writeToStream(matrix, formatName, base64Stream);
            base64Stream.close();
            qString = os.toString("UTF-8");
            os.close();
    
            return qString;
        } catch (final IOException ioe) {
            throw new UncheckedIOException(ioe);
        }
    

    经过上述更改后,base64编码的字符串得到了适当的填充,并且在Android端得到了适当的解码。在android端,这是我必须显示图像的代码:

     byte[] imageArr=Base64.decode(base64String.getBytes(), Base64.NO_WRAP);
     Bitmap bitmap=BitmapFactory.decodeByteArray(imageArr, 0, imageArr.length);
     return bitmap;
    
     类似资料:
    • 问题内容: 在StackOverflow上已经存在类似此链接的问题,并且可接受的答案是“广播”: 在我的程序中,我尝试: 不幸的是,我得到运行时错误: sun.awt.image.ToolkitImage无法转换为java.awt.image.BufferedImage 显然,投射不起作用。 问题是:将Image转换为BufferedImage的正确方法是(或存在)什么? 问题答案: 从Java游

    • 我试图制作一个程序,将一个老的GBA游戏的地图分成16x16个瓷砖,保存每个瓷砖,然后将每个抓取的瓷砖的原始图像数据与另一个保存的瓷砖列表进行比较,并自动确定是否是相同的图像。到目前为止,我已经将地图划分为16x16块,自动将每个16x16块保存到一个新的图像文件中,然后将所有这些图像文件作为BufferedImages加载到一个数组中。 我现在要做的是分析一个数组中每个块(一个BufferedI

    • 问题内容: 我一直在尝试将a转换为…而且我没有运气。 我有一个预先存在的ImageIcon,对于存在的大量BufferedImage操作,需要将其转换为Buffered Image。 我发现了几种方法,但是所有方法都占用大量CPU。 问题答案: 有什么问题:

    • 问题内容: 如何在Java中转换为? 请注意,现有答案显然是不正确的,因为它使用方法和,如果尚未加载图像(根据定义,它是一个异步对象),则可以返回。 请提供更正确的答案,或提供更多证明现有答案已经正确的证据。 问题答案: 如果这对您很重要,则可以使用“等待”来加载图像,然后就不必担心提供 看看JavaDocs了解更多详细信息 我不想添加任何GUI,我只需要下载图像或失败 好吧,如果您“需要下载”该

    • 问题内容: 我有一个图像文件的Data-URL,必须将其传递给另一个函数。从Data-URL到BufferedImage的路径必须是一个byteArray。 我的方法如下: 问题是,它总是抛出UnknownImageFormatException异常,这意味着inputImage为null,这意味着ImageIO.read无法识别图像类型。 我使用ImageIO.getReaderFormatNa

    • 问题内容: 如何将a转换为in ? 我正在使用JAVA包装器(不是 JavaCV )。由于我是新手,因此在理解工作方式方面存在一些问题。 我想做这样的事情。(根据Ted W.的回复): 这行不通。只是一张尺寸正确的黑色图片。 问题答案: 我还试图做同样的事情,因为需要将经过处理的图像与两个库结合在一起。而我一直试图做的是把中,而不是RGB值。而且有效!所以我做的是: 1,转换为字节数组 2.然后,