尝试调用虚方法' void android.graphics.Bitmap.copyPixelsFromBuffer(java.nio.Buffer)'在null对象引用上

时间:2015-08-01 19:33:06

标签: android performance android-fragments android-activity bitmap

我有一个ImageView我正在从中获取位图,然后使用copyPixelstoBuffer并将其复制到buffer_temp,现在我想使用反向算法再次转换它到另一个位图,从该位图到ImageView2

我到底在做的是使用ImageViewBuffer中的图片复制到Pasting并使用ImageviewBuffer复制到另一个copyPixelsFromBuffer,同时复制{{总是抛出

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.graphics.Bitmap.copyPixelsFromBuffer(java.nio.Buffer)' on a null object reference.

不知道为什么,需要帮助,

try {
                Buffer bfr = null;
                iv1.setImageResource(R.drawable.olx);
                BitmapDrawable drawable = (BitmapDrawable) iv1.getDrawable();
                Bitmap bitmap = drawable.getBitmap();
                int bytes=bitmap.getByteCount();
                ByteBuffer buffer_temp= ByteBuffer.allocate(bytes);
                bitmap.copyPixelsToBuffer(buffer_temp);
                System.out.println("Values are "+ bitmap.getAllocationByteCount());

                Bitmap btmp=null;

                //btmp.copyPixelsFromBuffer(buffer_temp);


                if(buffer_temp==null)
                 return;

                buffer_temp.rewind();

                btmp.copyPixelsFromBuffer(buffer_temp);


                if(buffer_temp==null)
                {
                    Toast.makeText(getApplicationContext(), "Null", Toast.LENGTH_SHORT).show();
                }
                else
                {
                    Toast.makeText(getApplicationContext(), "Not Null", Toast.LENGTH_SHORT).show();
                }



            } catch (NotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }       

2 个答案:

答案 0 :(得分:2)

btmp null 。 使用附加代码是没有办法的。那么,btmp的值将是任何。但它是 null

如果要克隆Bitmap,请使用create方法或任何其他方法。

Bitmap btmp = Bitmap.create(drawable.getBitmap());

答案 1 :(得分:2)

“是的,btmp为空”

但是,你试图在它上面调用方法调用:

btmp.copyPixelsFromBuffer(buffer_temp); // <- here

那不行。您应该在使用之前初始化btmp

<强>更新

像这样初始化:

...
System.out.println("Values are "+ bitmap.getAllocationByteCount());

// here's the initialization
Bitmap btmp = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig());

buffer_temp.rewind();

// now you can call copyPixelsFromBuffer() on btmp
btmp.copyPixelsFromBuffer(buffer_temp);
...