Android 获取不创建位图的可绘制文件的字节[]

Android 获取不创建位图的可绘制文件的字节[],android,bitmap,drawable,Android,Bitmap,Drawable,我需要发送一个PNG到服务器。一个非常简单的解决方案是创建一个位图,并使用以下代码将其转换为字节[]: final Bitmap bitmap = BitmapFactory.decodeResource(res, R.drawable.some_image); final ByteArrayOutputStream os = new ByteArrayOutputStream(); bitmap.compress(CompressFormat.PNG, 100, os); final byte

我需要发送一个PNG到服务器。一个非常简单的解决方案是创建一个
位图
,并使用以下代码将其转换为
字节[]

final Bitmap bitmap = BitmapFactory.decodeResource(res, R.drawable.some_image);
final ByteArrayOutputStream os = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, 100, os);
final byte[] data = os.toByteArray();
由于我想节省时间和内存,我想实现这一点,而无需创建位图

一个想法是将
Drawable
作为
文件访问,但我不知道如何获得正确的路径


有什么想法吗?

哈里斯给了我最后一个提示:使用
resources.openrawsource
方法之一

以下是我的最终解决方案:

private byte[] fetchImageData(Resources res) throws IOException {
    final AssetFileDescriptor raw = res.openRawResourceFd(R.drawable.some_image);
    final FileInputStream is = raw.createInputStream();

    // there are plenty of libraries around to achieve this with just one line...
    final ByteArrayOutputStream buffer = new ByteArrayOutputStream();

    int nRead;
    final byte[] data = new byte[16384];

    while ((nRead = is.read(data, 0, data.length)) != -1) {
        buffer.write(data, 0, nRead);
    }

    buffer.flush();

    return buffer.toByteArray();
}
在我的例子中,PNG是250x200px,文件大小是42046字节。
位图
进近需要大约500毫秒,原始进近需要3毫秒


希望有人能使用这个解决方案。

我对
Resources.openRawResource(R.drawable.*)进行了一些测试。
但没有得到稳定的结果。这意味着
InputStream
长度与我在文件系统上看到的长度不匹配。无论如何,这可能会给您提供一种方法,可以将
Drawable
作为
InputStream
直接读取,并将其转发到您的
OutputStream