gpt4 book ai didi

android - 在android中使用位图的问题

转载 作者:太空宇宙 更新时间:2023-11-03 11:21:43 25 4
gpt4 key购买 nike

我有以下问题:

First activity

Android 相机打开,用户可以拍照。拍照后,第二个 Activity 启动。

Second activity

在此 Activity 中,用户可以查看照片。为此,我从第一个 Activity 中收到了这样的图片:

Bundle extras = getIntent().getExtras();

然后我创建了以下位图:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 5;
options.inDither = true;
byte[] imageData = extras.getByteArray("imageData");
myImage = BitmapFactory.decodeByteArray(imageData, 0,
imageData.length, options);

Matrix mat = new Matrix();
mat.postRotate(90);
bitmapResult = Bitmap.createBitmap(myImage, 0, 0, myImage.getWidth(),
myImage.getHeight(), mat, true);
//...operations on the bitmapResult

结果位图存储在 sdcard 中,在离开此 Activity 之前,我回收了我的位图以避免内存问题:

bitmapResult.recycle();
bitmapResult=null;

完成所有这些后,我们继续进行 Activity 3。

Third activity

在此 Activity 中,用户可以看到不同尺寸的图片。图片取自sdcard

最大的问题是,当用户点击后退按钮时,从 Activity three 转到 Activity two,但我的应用程序崩溃了,因为正在尝试执行 对回收后的位图进行操作。

如果我不在第二个 Activity 中回收位图,当我在我的应用程序中上下移动几次时,我会得到 OutOfMemeory Exception

有什么想法吗?

最佳答案

当您的用户在Activity 2 不要直接进入Activity 3(图库) .首先,完成Activity 2,返回一个结果给Activity 1。然后开始 Activity 3

您的第一个/主要 Activity :

public class TakeAPicture extends Activity {

public static final int REQUEST_PICTURE_WAS_TAKEN = 100;
public static final int REQUEST_SHOW_GALLERY = 101;
public static final int RESULT_PICTURE_WAS_TAKEN_SHOW_GALLERY = 102;
public static final int RESULT_BACK_FROM_GALLERY = 103;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.takeapicture);

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

@Override
public void onClick(View v) {
Intent i = new Intent(getApplicationContext(),
PictureTaken.class);
startActivityForResult(i, REQUEST_PICTURE_WAS_TAKEN);
}
});
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case REQUEST_PICTURE_WAS_TAKEN:
if (resultCode == RESULT_PICTURE_WAS_TAKEN_SHOW_GALLERY) {
Intent i = new Intent(getApplicationContext(), Gallery.class);
startActivityForResult(i, REQUEST_SHOW_GALLERY);
}
break;
default:
break;
}
}
}

在你的第二个 Activity 中你必须做这样的事情:

public class PictureTaken extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.picturetaken);

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

@Override
public void onClick(View v) {
PictureTaken.this
.setResult(TakeAPicture.RESULT_PICTURE_WAS_TAKEN_SHOW_GALLERY);
PictureTaken.this.finish();
}
});
}
}

问候

关于android - 在android中使用位图的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7270364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com