如何获取资源文件夹中drawables的路径名?我试图在我的资源文件夹中获取图像并将其传递给函数进行解码。
路径“android.resource://com.myapp.example/”+ R.drawable.image“没有用。
Bitmap bitmap;
File image = new File("android.resource://com.myapp.example/"+ R.drawable.image);
bitmap.decodeFile(image);
public Bitmap decodeFile(File f) {
try {
// decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(new FileInputStream(f), null, o);
// Find the correct scale value. It should be the power of 2.
final int REQUIRED_SIZE = 70;
int width_tmp = o.outWidth, height_tmp = o.outHeight;
int scale = 1;
while (true) {
if (width_tmp / 2 < REQUIRED_SIZE
|| height_tmp / 2 < REQUIRED_SIZE)
break;
width_tmp /= 2;
height_tmp /= 2;
scale++;
}
// decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
} catch (FileNotFoundException e) {
}
return null;
}
答案 0 :(得分:6)
BitmapFactory具有解码资源的功能:
Bitmap BitmapFactory.decodeResource (Resources res, int id, BitmapFactory.Options opts)
示例:
bitmap.decodeFile(R.drawable.image);
public Bitmap decodeFile(int resId) {
try {
// decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getContext().getResources(), resId, o);
// Find the correct scale value. It should be the power of 2.
final int REQUIRED_SIZE = 70;
int width_tmp = o.outWidth, height_tmp = o.outHeight;
int scale = 1;
while (true) {
if (width_tmp / 2 < REQUIRED_SIZE
|| height_tmp / 2 < REQUIRED_SIZE)
break;
width_tmp /= 2;
height_tmp /= 2;
scale++;
}
// decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
return BitmapFactory.decodeResource(getContext().getResources(), resId, o2);
} catch (Exception e) {
}
return null;
}
答案 1 :(得分:0)
不,您无法获取路径,因为资源文件夹已编译到apk中,但您可以像这样获取资源:
Resources rsrc= getResources();
Drawable drawable= rsrc.getDrawable(R.drawable.datImage);
Bitmap bm = BitmapFactory.decodeResource(rsrc,drawable, opts);