我有一个ImageView
,我从中得到位图,然后使用copyPixelstoBuffer
并将其复制到buffer_temp
,现在我想使用反向算法再次将其转换为另一个位图并从该位图转换为ImageView2
,
我正在做的是使用Buffer
和Pasting
将ImageView
中的图像复制到使用Buffer
的另一个Imageview
上,但是在复制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();
}
btmp 是空。没有办法通过使用附加的代码。那么,btmp的值将是任何。但它是null!
如果你想克隆位图,使用create方法或其他类似的方法。
Bitmap btmp = Bitmap.create(drawable.getBitmap());
"yes, BTMP is null"
但是,你试图调用它的方法调用:
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);
...