在Android中将位图写入数组而不是文件流

时间:2013-02-07 13:20:43

标签: android arrays bitmap

目前,当我想将位图保存到磁盘时,我使用:

bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);

是否可以将数据写入字节数组?我需要操纵进入磁盘的数据,而不仅仅是位图的图像数据。 jpg包含元数据等其他内容。我真的不在乎它是一个jpg。我对数据不感兴趣,只是访问通常写入磁盘的整个数据。

4 个答案:

答案 0 :(得分:2)

您可以使用以下方式执行此操作:

public byte[] convertBitmapToByteArray(Bitmap bitmap) {
    ByteArrayOutputStream buffer = new ByteArrayOutputStream(bitmap.getWidth() * bitmap.getHeight());
    bitmap.compress(CompressFormat.PNG, 100, buffer);
    return buffer.toByteArray();
}

答案 1 :(得分:2)

如果您希望保留原始像素数据(不压缩),可以尝试:

public byte[] bitmapToByteArray(Bitmap bitmap) {
    ByteBuffer byteBuffer = ByteBuffer.allocate(bitmap.getByteCount());
    bitmap.copyPixelsToBuffer(byteBuffer);
    return byteBuffer.array();
}

答案 2 :(得分:2)

您可以使用此代码:

      ByteArrayOutputStream out = new ByteArrayOutputStream();

                bMap.compress(Bitmap.CompressFormat.PNG, 100, out);
                byte[] imageArray = out.toByteArray();

答案 3 :(得分:-1)

U can try this.

if (Utility.isWifiPresent()
                    || Utility.isMobileConnectionPresent()) {
                URL url = new URL(fileUrl);
                InputStream iStream = url.openConnection().getInputStream();// .read(data)
                ByteArrayOutputStream buffer = new ByteArrayOutputStream();
                byte[] tmpArray = new byte[1024];
                int nRead;
                while ((nRead = iStream.read(tmpArray, 0, tmpArray.length)) != -1) {
                    buffer.write(tmpArray, 0, nRead);
                }
                buffer.flush();
                data = buffer.toByteArray();
                FileOutputStream fOut = null;
        //path to store

                    fOut = Utility.getFileOutputStreamForCloud(
                            sdcardFolderPath, fileUrl);
                }
                fOut.write(data);
                fOut.flush();
                fOut.close();