2

ビットマップを作成しようとしています

 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);

しかし、wrench.getHeight()を呼び出すと、プログラムはNullPoinerExceptionで失敗しました。(ファイルをドローアブルディレクトリに置きます)どうすれば問題を解決できますか?

4

3 に答える 3

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 に格納されている image の正確なパスを取得することはできません。

なぜだめですか?アプリを *.apk ファイルにコンパイルすると、すべてのリソース (/raw のリソースを除く) もコンパイルされます。R. id を使用してのみアクセスできます。

解決?そうではありません。たとえば、sd カード上の場所にコピーできます。いいえ、あなたは場所を知っています:)

于 2012-04-11T20:22:58.240 に答える
2

わかりました...私は今あなたの問題を処理していると思います。私が言ったように、パスを介してドローアブルにアクセスすることはできません。したがって、プログラムで構築できる人間が読めるドローアブルとのインターフェイスが必要な場合は、クラスのどこかで 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);
于 2012-04-11T20:47:43.133 に答える
1

次のようにできます。

String imageNameWithoutExtension = "wrench";
int id = getResources().getIdentifier(imageNameWithoutExtension, "drawable", getPackageName());
Bitmap dd = BitmapFactory.decodeResource(getResources(), id);
logo.setImageBitmap(dd);
于 2012-04-11T20:52:38.567 に答える