代号一中的图像到字节数组

Image to byte array in Codename One

我需要在我的代号 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>");

它有效,但我需要从没有路径或文件名的图像创建 base64 字符串,因为它来自特殊的 class MyImageFromSVGSubset。

此工具用于生成 class:https://www.codenameone.com/blog/flamingo-svg-transcoder.html

注意:CodenameOne中的Imageclass也有int[]getRGB()方法。

如何实现我的目标?

您可以使用专为此设计的 ImageIO:将 Image 转换为字节。但是,有一个稍微简单的 hack。 EncodedImage 开箱即用,因此:

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

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