2010-10-21 133 views
7

这让我感到莫名其妙。我需要将位图从一个ImageView复制到另一个。我不想简单地将一个ImageView复制到另一个ImageView,因为我需要对位图进行一些更改。将一个ImageView的位图内容复制到另一个

下面是一些不起作用的代码。

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 

//要测试的位图:

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

我必须要对此错误的,因为这样做的副本应该是那么容易。 TIA

回答

20

未使用绘图缓存,但不需要调用buildDrawingCache()?

我会做到这一点:

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

注意bmSrc2是可变的,即可以在画布坚持下去,做任何你的地方绘制它之前,它喜欢。

+0

如果(使用您的变量)'bmSrc2'出现负宽度和/或高度? – 2012-11-09 18:37:28

相关问题