Java 代码名为1的图像到字节数组

Java 代码名为1的图像到字节数组,java,image,base64,codenameone,Java,Image,Base64,Codenameone,我需要在我的Codename One应用程序中将图像转换为字节数组 它将用于创建要在BrowserComponent中使用的图像的base64表示形式 我试过这个: byte[] bytes=new byte[10]; String base64IconString="data:image/png;base64,"; try(InputStream is = getClass().getResourceAsStream("/icon.png"

我需要在我的Codename One应用程序中将图像转换为字节数组

它将用于创建要在BrowserComponent中使用的图像的base64表示形式

我试过这个:

byte[] bytes=new byte[10];
    String base64IconString="data:image/png;base64,";
    try(InputStream is = getClass().getResourceAsStream("/icon.png");) {
        bytes=new byte[is.available()];
// the instruction above is wrong. it will fail
// use Util.readInputStream(InputStream) in Codename One instead
// see comments

         Util.readAll(is, bytes);
        base64IconString+=Base64.encode(bytes);
    } catch(IOException err) {
        Log.e(err);
    }
我把结果放在这里:

browserComponent.setPage("<HTML><BODY>" + "<img src='"+base64IconString+"' />" + "</BODY></HTML>");
browserComponent.setPage(“+”);
它可以工作,但我需要从一个没有路径或文件名的映像创建base64字符串,因为它来自一个特殊的类MyImageFromSVGSubset

此工具用于生成该类:

注意:CodenameOne中的Image类还有int[]getRGB()方法


如何实现我的目标?

你可以使用
ImageIO
,它正是为此而设计的:将
图像
转换为字节。然而,有一个稍微简单一点的黑客
EncodedImage
支持开箱即用,因此:

EncodedImage em = EncodedImage.createFromImage(otherImage, jpegOrPNG);
byte[] data = em.getImageData();

另请参见
BrowserComponent.createDataURI(byte[],mime)

newbyte[is.available()]
← 最终这将失败。From:“使用此方法的返回值分配用于保存此流中所有数据的缓冲区是不正确的。”是。Codename One中还有
Util.readInputStream(InputStream)
,可以正确无缝地执行此操作。