我是开发app,在这里我有两个活动,一个是PaintActivity,另一个是TextActivity。当用户单击PaintActivity中的按钮时,TextActivity将与PainActivity的位图一起显示。在此用户输入文本,并在编辑完成后为文本提供字体样式和颜色单击应用按钮以转到paintactivity以及文本和位图,我使用以下代码它工作正常,除了一个设备,然后我在一个模拟器(5.4“FWVGA(480 * 854:mdpi))中检入了不同的模拟器,在TextAcitivty中单击”应用“按钮时出现了内存异常。
我正在使用以下代码
PaintActivity:
text.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
realPaint.setDrawingCacheEnabled(true);
Bitmap b2 = Bitmap.createBitmap(realPaint.getDrawingCache());
realPaint.setDrawingCacheEnabled(true);
ByteArrayOutputStream bs = new ByteArrayOutputStream();
b2.compress(Bitmap.CompressFormat.PNG, 100, bs);
byte[] byteArray = bs.toByteArray();
Intent i=new Intent(PaintActivity.this, TextActivity.class);
i.putExtra("bitT", byteArray);
realPaint.setDrawingCacheEnabled(false);
startActivityForResult(i,TEXT_BITMAP);
}
});
protected void onActivityResult(int requestCode, int resultCode, Intent data){
if(requestCode==TEXT_BITMAP && resultCode==RESULT_OK && data!=null){
byte[] byteArray=data.getByteArrayExtra("bittext");
BitmapFactory.Options opt=new BitmapFactory.Options();
opt.inSampleSize=3;
Bitmap bittext=BitmapFactory.decodeByteArray(byteArray,0,byteArray.length,opt);
image.setImageBitmap(bittext);
}
}
TextACtivity:
apply.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent i=new Intent();
ByteArrayOutputStream bs = new ByteArrayOutputStream();
loadBitmapFromView(real).compress(Bitmap.CompressFormat.PNG, 100, bs);
byte[] byteArray = bs.toByteArray();
i.putExtra("bittext", byteArray);
setResult(RESULT_OK,i);
finish();
}
});
答案 0 :(得分:0)
您可以尝试使用另一个配置来减小位图的大小 - 即Config.RGB_565
opt.inSampleSize=3;
opt.inPreferredConfig = Config.RGB_565;
答案 1 :(得分:0)
我使用静态位图而不是发送字节数组(将位图转换为字节数组)以避免内存不足异常。