图像分辨率或尺寸问题会导致“强制关闭”错误

时间:2013-12-29 16:01:05

标签: android image bitmap decode

我有2 imageViewgallery导入图片并设置在这些imageViews上。我基本上是这样做的:

String mPicPath1, mPicPath2;

protected void onCreate(Bundle icicle) {

mPicPath1 = null;
mPicPath2 = null; 

}

@Override
protected void onActivityResult(int requestCode, int resultcode, Intent data){
super.onActivityResult(requestCode, resultcode, data);

switch(requestCode){
case 1:
    if (data != null && resultcode == RESULT_OK) 
    {              

        Uri selectedImage = data.getData();

        String[] filePathColumn = {MediaStore.Images.Media.DATA};
        Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
        cursor.moveToFirst();
        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        mPicPath1 = cursor.getString(columnIndex);
        cursor.close();

        logoview.setBackgroundResource(0);
        logoview.setImageBitmap(BitmapFactory.decodeFile(mPicPath1));
    }
break;  
case 2:
    if (data != null && resultcode == RESULT_OK) 
    {              

        Uri selectedImage = data.getData();                     
        String[] filePathColumn = {MediaStore.Images.Media.DATA};
        Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        cursor.moveToFirst();                   
        mPicPath2 = cursor.getString(columnIndex);
        cursor.close();
        qrcodeview.setBackgroundResource(0);
        qrcodeview.setImageBitmap(BitmapFactory.decodeFile(mPicPath2));
    }
break;
}

我使用按钮onClickListener启动意图并转到SecondActivity

save=(Button)findViewById(R.id.save);
save.setOnClickListener(new View.OnClickListener() {

@Override   
public void onClick(View v) {

Intent intent = new Intent(NewCard.this, Template.class);


    if (!TextUtils.isEmpty(mPicPath1)) {
        intent.putExtra("picture_path1", PicPath1);
    }
    if (!TextUtils.isEmpty(mPicPath2)) {
       intent.putExtra("picture_path2", PicPath2);
    }
    startActivity(intent);

}
});

我的SecondActivity在2个不同的imageViews上设置图片:

String pre_img_path1= getIntent().getStringExtra("picture_path1");
ImageView crdlogoframe = (ImageView)       findViewById(R.id.crdlogoframe);
crdlogoframe.setImageBitmap(BitmapFactory.decodeFile(pre_img_path1));

String pre_img_path2= getIntent().getStringExtra("picture_path2");
ImageView crdqrframe = (ImageView) findViewById(R.id.crdqrframe);
crdqrframe.setImageBitmap(BitmapFactory.decodeFile(pre_img_path2));

所以我的问题是关于图像的文件大小或分辨率。如果我从画廊拍摄2张高分辨率图像(由标准相机拍摄:1992kb,3264x2448),然后点击我的保存(save.onClickListener)按钮,我收到Force Close错误。如果我拍摄小尺寸图像没有问题(74kb,800x600)我可以继续SecondActivity并查看图像设置。我怎么能解决这个问题。当我选择或设置时,我应该使用语法来调整图像大小。格式均为.Jpeg。非常感谢你。

2 个答案:

答案 0 :(得分:0)

我还没有代表评论呢......但是西蒙说你的图像大到31MB需要尝试保持大约16MB以下的东西所以你必须重新调整大小才能显示它们

答案 1 :(得分:0)

而不是

BitmapFactory.decodeFile(mPicPath2)

您需要使用类似

的内容
BitmapFactory.decodeFile(mPicPath2, options)

其中,选项是BitmapFactory.Options的一个实例,其中inSampleSize设置为类似4,可以在加载图像时缩小图像。