我正在尝试创建一个位图
BitmapDrawable img = new BitmapDrawable(getResources(), "res/drawable/wrench.png");
Bitmap wrench = img.getBitmap();
//Bitmap wrench = BitmapFactory.decodeResource(getResources(), R.drawable.wrench);
canvas.drawColor(Color .BLACK);
Log.d("OLOLOLO",Integer.toString(wrench.getHeight()));
canvas.drawBitmap(wrench, left, top, null);
但是当我使用NullPoinerException调用 wrench.getHeight()程序失败时。 (我把文件放在drawable目录中) 我该如何解决我的问题?
答案 0 :(得分:2)
试试这个:
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.wrench);
Matrix matrix=new Matrix();
matrix.postScale(0.2f, 0.2f);
Bitmap dstbmp=Bitmap.createBitmap(bmp,0,0,bmp.getWidth(),
bmp.getHeight(),matrix,true);
canvas.drawColor(Color.BLACK);
canvas.drawBitmap(dstbmp, 10, 10, null);
“res / drawable / wrench.png”无效路径,因此如果您使用来自drawable的图像,请使用sbcard中的图像,然后使用R.drawable.wrench
无法获得存储在drawable中的图像的确切路径。
为什么不呢?当您将应用程序编译为* .apk文件时,所有资源(确定,除了来自/ raw之外)都会被编译。您只能使用他们的R. id。
来访问它们解决方案?不是,您可以将它们复制到SD卡上的某个位置。你不知道这个位置:)
答案 1 :(得分:2)
好的......我想我现在能解决你的问题了。就像我说的那样,你不能通过一个路径访问你的drawables,所以如果你想要一个可编程的人类可读界面,你可以用编程方式构建,在你的类中的某个地方声明一个HashMap:
private static HashMap<String, Integer> images = null;
然后在构造函数中初始化它:
public myClass() {
if (images == null) {
images = new HashMap<String, Integer>();
images.put("Human1Arm", R.drawable.human_one_arm);
// for all your images - don't worry, this is really fast and will only happen once
}
}
现在进行访问 -
String drawable = "wrench";
// fill in this value however you want, but in the end you want Human1Arm etc
// access is fast and easy:
Bitmap wrench = BitmapFactory.decodeResource(getResources(), images.get(drawable));
canvas.drawColor(Color .BLACK);
Log.d("OLOLOLO",Integer.toString(wrench.getHeight()));
canvas.drawBitmap(wrench, left, top, null);
答案 2 :(得分:1)
你可以这样做:
String imageNameWithoutExtension = "wrench";
int id = getResources().getIdentifier(imageNameWithoutExtension, "drawable", getPackageName());
Bitmap dd = BitmapFactory.decodeResource(getResources(), id);
logo.setImageBitmap(dd);