使用Android将图像作为字节数组读取:skImageDecoder :: Factory返回null

时间:2014-12-16 13:07:36

标签: java android spring-mvc jackson

我有一个Spring MVC Web服务,它将图像作为字节数组返回。输出采用json格式。格式为png 这是图像的代码段。

BufferedImage img = ImageIO.read(new File(caminho.replace("/", "//")));
                imagem = ((DataBufferByte) img.getRaster().getDataBuffer

()).getData();

当我运行服务器时,这是输出:

[{ “ID”:0, “caminhoMDPI”:NULL, “caminhoHDPI”:“C:/用户/马科斯/图片/ postos /抽拉 -

MDPI / esso_logo.png “ ”caminhoXHDPI“:NULL, ”caminhoXXHDPI“:NULL, ”IMAGEM“:” AAAAAAAAAAAAAAAAAAAAAAA

... AAAAAAAAAAAAAAAAAAAAAAAAAA]

最终,“imagem”字段中会出现其他符号。我想这是对的,但我不是

确定。

在我的Android应用程序上,我有一个例程来下载图像并将其作为blob存储在数据库中。我收到json格式并将其转换为带有jackson的类。我已经记录了“imagem”字段,它看起来一样。

我的问题是我无法将其转换为图像。这是代码片段:

byte[] img_bandeira = cursor.getBlob(cursor.getColumnIndex("img_bandeira"));
        Bitmap bmpBandeira = BitmapFactory.decodeByteArray(img_bandeira, 0, img_bandeira.length);
        ImageView ivBandeira = (ImageView) view.findViewById(R.id.ivBandeira);
        ivBandeira.setImageBitmap(bmpBandeira);

我得到的只是一条消息:skImageDecoder :: Factory返回null。

我看了其他类似的帖子,试图改变一些行,但什么都没发生。我不知道这里发生了什么。提前谢谢。

1 个答案:

答案 0 :(得分:1)

我解决了。在服务器中,图像应该像这样发送:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
                BufferedImage img = ImageIO.read(new File(caminho.replace("/", "//")));
                ImageIO.write(img, "png", baos);
                baos.flush();
                String base64String = Base64.encode(baos.toByteArray());
                baos.close();

在我的应用中,它应该是这样的:

public static Bitmap getImage(byte[] imageArray) {
        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(imageArray);
        Bitmap bitmap = BitmapFactory.decodeStream(byteArrayInputStream);
        return bitmap;
    }

谢谢大家;)