gpt4 book ai didi

java - 在android中将资源读取为InputStream

转载 作者:行者123 更新时间:2023-11-30 06:18:14 24 4
gpt4 key购买 nike

我有一些 android 项目,我正在尝试从“res/drawable-xhdpi”目录中读取一些文件,所以我把

InputStream is = null;

try {
is = getResources().openRawResource(R.drawable.my_btn); //my_btn is inside drawable-xhdpi directory
} catch (Exception e) {
e.printStackTrace();
}

但是我明白了

error opening trace file: No such file or directory 

我该如何处理这个问题。我尝试使用绝对路径直接从 FileInputStream 读取它,然后我意识到从中获取文件的根是 JVM 的根,所以我仍然得到了同样的 No such file or directory错误信息

更新:

我在 src/main 中添加了一个 assets 目录,然后将 my_btn.png 放入其中,然后在我的 中调用>MainActivity

InputStream is = null;

try {

is = getAssets().open("my_btn.png");

} catch (Exception e) {
e.printStackTrace();
}

但还是报错

最佳答案

仅当您在 xhdpi 设备上运行该应用程序时,才会从 "res/drawable-xhdpi" 获取可绘制对象。否则它会尝试根据屏幕从相应的 drawable 文件夹中获取 drawable,如果不存在,您将得到与上述相同的错误。如果您不确定您使用的是哪种屏幕尺寸,最好的解决方法是在 res 文件夹中创建一个名为 "drawable" 的目录(即 "res/drawable" ) 然后将 my_btn 添加到新创建的 "drawable" 文件夹中。然后无论屏幕大小如何,它都会从新文件夹中获取图像。

编辑

您使用的是原始文件夹,而不是资源文件夹。 openRawResource 从原始文件夹中读取。使用以下代码获取可绘制对象并将其转换为输入流(您必须用 try-catch 包围)。

Drawable drawable = getResources().getDrawable(R.drawable.my_btn);
BitmapDrawable bitmapDrawable = ((BitmapDrawable) drawable);
Bitmap bitmap = bitmapDrawable.getBitmap();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.JPEG, 100, stream); //use the compression format of your need
InputStream is = new ByteArrayInputStream(stream.toByteArray());

关于java - 在android中将资源读取为InputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24932838/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com