Bild aus Resource auf ein Bild der Resource malen

  • Antworten:3
  • Bentwortet
Phil
  • Forum-Beiträge: 40

07.09.2011, 13:57:58 via Website

Hallo,
ich habe in meiner App ein ImageView. Nun möchte ich gerne per ButtonClick ein Bild in das ImageView laden. Das ist nicht das große Problem. Mein Problem ist, ein Bild aus den Ressourcen zu laden und ein weitere Ressourcenbild in dieses Bild zu malen und dieses dann in dem ImageView anzeigen.

Ich habe bisher folgendes verwendet:
1int img = R.drawable.img_1;
2Bitmap bmp_1 = Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(), img));
3Bitmap bmp_2= BitmapFactory.decodeResource(getResources(), R.drawable.img_2);
4Canvas c = new Canvas(bmp_1);
5c.drawBitmap(bmp_2, 0, 16, null);
6((ImageView) view.findViewById(R.id.img)).draw(c);

Leider bekomme ich in dieser Zeile
1Canvas c = new Canvas(bmp_1);
eine Exception:
Immutable bitmap passed to Canvas constructor

Gehe ich überhaupt richtig vor, oder gibt es bessere / einfachere Wege? Hat jemand evtl. einen Tipp oder eine Lösung?

Vielen Dank :)

MfG
Phil

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

08.09.2011, 09:50:42 via Website

Ich habe sowas auch noch nie gemacht, aber mein erster Versuch wäre ein FrameLayout mit zwei ImageViews, von denen ich das eine dann bei Bedarf ein und ausblenden würde.

Antworten
Phil
  • Forum-Beiträge: 40

08.09.2011, 10:11:15 via Website

Eigentlich müsste ich doch nur aus den Ressourcen zwei Bitmaps machen. Dann erzeuge ich ein Canvas, male erst das eine Bitmap und dann das andere. Zum schluss muss ich dann nur noch das Canvas dem ImageView zuweisen, oder nicht?

Nur leider scheitere ich schon beim Zeichnen und zuweisen, siehe erster Post.

Antworten
Phil
  • Forum-Beiträge: 40

12.09.2011, 09:41:01 via Website

Ok,
ich habe die lösung gefunden:
1private Bitmap setWatermark(int image, int water){
2 Bitmap mBitmap = Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(), image));
3 Bitmap watermark = Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(), water));
4 mBitmap = mBitmap.copy(Bitmap.Config.RGB_565, true);
5
6 try{
7 Canvas mCanvas = new Canvas(mBitmap);
8
9 Paint speedPaint = new Paint();
10 speedPaint.setARGB(180, 255, 255, 255);
11 speedPaint.setAntiAlias(true);
12
13 mCanvas.drawBitmap(watermark, 0, 0, speedPaint);
14 mBitmap = mBitmap.copy(Bitmap.Config.RGB_565, false);
15 return mBitmap;
16 }catch(Exception e){
17 mBitmap = mBitmap.copy(Bitmap.Config.RGB_565, false);
18 return mBitmap;
19 }
20
21 }

Vllt. kann es ja auch noch wer brauchen.

Antworten