2010-10-21 14 views
7

To mnie dziwi. Muszę skopiować bitmapę z jednego ImageView do drugiego. Nie chcę po prostu kopiować jednego ImageView do drugiego, ponieważ muszę zrobić kilka zmian w bitmapie na jego drodze.Kopiowanie zawartości bitmapy jednego ImageView do anoher

Oto kod, który nie działa.

ImageView ivSrc = (ImageView) findViewById(R.id.photo); 

ivSrc.setDrawingCacheEnabled(true); 
    Bitmap bmSrc1 = ivSrc.getDrawingCache(); // will cause nullPointerException 

    Bitmap bmSrc2 = Bitmap.createBitmap(ivSrc.getDrawingCache());//bmSrc2 will be null 

    View vSrc = (View) ivSrc.getParent(); 
    vSrc.setDrawingCacheEnabled(true); 
    Bitmap bmSrc3 = Bitmap.createBitmap(vSrc.getDrawingCache()); //black bitmap 

// Aby przetestować bitmap:

 ImageView ivDest = (ImageView) findViewById(R.id.photo2); 
     ivDest.setImageBitmap(bmSrc1); //bmSrc1, 2, 3 results shown above 

mam zamiar o tym złego, ponieważ robi kopię powinno być tak proste. TIA

Odpowiedz

20

Nie używane buforowanie rysunku, ale czy nie trzeba wywoływać procedury buildDrawingCache()?

Sposób bym go zrobić:

Bitmap bmSrc1 = ((BitmapDrawable)ivSrc.getDrawable()).getBitmap(); 
Bitmap bmSrc2 = bmSrc1.copy(bmSrc1.getConfig(), true); 

Zauważ, że bmSrc2 jest zmienny, to znaczy można trzymać go w płótno i robić, co chcesz z nim przed wyciągnięciem go gdzieś.

+0

Co jeśli (używając zmiennych) 'bmSrc2' wychodzi z ujemną szerokością i/lub wysokością? –

Powiązane problemy