2012-04-11 7 views
1

Ich versuche, ein BitmapSchaffung BitmapDrawable von Pfad

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

zu schaffen, aber wenn ich wrench.getHeight() aufrufen Programm nicht mit NullPoinerException. (Ich lege die Datei in Zeichenverzeichnis) Wie kann ich mein Problem lösen?

+0

Was ist passiert, als Sie die BitmapFactory-Version erstellt haben? – JRaymond

+0

Bitmap Factory-Version funktioniert gut, aber ich muss mit Pfad arbeiten (um es durch einige Zeichenfolgen zu konstruieren) – user1128677

+0

Warum müssen Sie es durch Zeichenfolgen zu konstruieren? Ist es so, dass Sie, wenn Sie einen Schraubenschlüssel benötigen, einen Schraubenschlüssel hinzufügen können? Denn dafür gibt es bessere Lösungen, die ich Ihnen gerne zeigen würde - aber Sie können nicht über einen Dateipfad auf den Ressourcenordner zugreifen. – JRaymond

Antwort

2

Ok ... Ich denke, ich habe jetzt ein Problem mit Ihrem Problem. Wie ich schon sagte, kann man nicht über einen Weg Zugriff auf Ihre Drawables, wenn Sie also einen Menschen lesbaren Schnittstelle mit Ihrem Drawables mögen, die Sie programmatisch eine HashMap irgendwo in Ihrer Klasse zu bauen, erklären:

private static HashMap<String, Integer> images = null; 

es dann initialisieren in Ihrem Konstruktor:

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 
    } 
} 

Jetzt für den Zugang -

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

ziemlich gute Lösung, ich muss es versuchen! – user1128677

+0

aber Pfad-Version verfolgt mich immer noch (( – user1128677

+0

@ user1128677 Ich bin verwirrt ... brauchen Sie noch Hilfe oder habe ich es für Sie abdecken? – JRaymond

2

try this:

  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/ziehbar/wrench.png" ungültig Pfad entweder so Bilder verwenden, um von sbcard, wenn Sie Bilder von ziehbar verwenden, dann R.drawable.wrench

verwenden Es ist nicht möglich, den genauen Pfad für ein Bild zu erhalten, das in drawable gespeichert wird.

Warum nicht? Wenn Sie Ihre App in eine * .apk-Datei kompilieren, werden alle Ressourcen (ok, außer denen in/raw) ebenfalls kompiliert. Sie können nur auf sie zugreifen, indem Sie ihre R. ID verwenden.

Lösung? Nicht wirklich, könnten Sie sie zum Beispiel auf einen Ort auf der SD-Karte kopieren. Nein, Sie kennen den Standort :)

+0

in meinem Code habe ich Version, die Bitmap von resourseId erstellt, aber ich muss wrk mit String (Pfad) – user1128677

+0

aber auf androiddevelopers http://developer.android.com/guide/topics/ resources/drawable-resource.html sagt, dass dieser Pfad wie "file location: res/drawable/filename.png (.png, .jpg oder .gif) sein kann. Der Dateiname wird als Ressourcen-ID verwendet." – user1128677

+0

aber wir wissen nicht, wo 'res/drawable/filename.png' auf Gerät –

1

Sie können wie folgt tun:

String imageNameWithoutExtension = "wrench"; 
int id = getResources().getIdentifier(imageNameWithoutExtension, "drawable", getPackageName()); 
Bitmap dd = BitmapFactory.decodeResource(getResources(), id); 
logo.setImageBitmap(dd);