我有两个活动,第一个活动(相机活动)包含两个用于打开相机的按钮,第二个活动显示表单包含我需要传递在另一个FORM活动中从相机捕获的位图的图像视图 ,相机打开并拍摄图像,此图像放在另一个活动的imageview上 但我的代码是拍摄图像并返回第一个活动不显示在第二个活动上?
相机代码
public class camera extends Activity {
static final int REQUEST_IMAGE_CAPTURE = 1;
private static final int CAMERA_REQUEST = 1888;
ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_camera);
//register
Button camera = (Button)findViewById(R.id.s_camera);
camera.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
open();
}
});
Button call = (Button)findViewById(R.id.s_call);
call.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Uri uri = Uri.parse("tel:0555064740");
Intent intent = new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);
}
});
}
public void open(){
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent,0);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==CAMERA_REQUEST&&resultCode==RESULT_OK) {
Bitmap bp = (Bitmap) data.getExtras().get("data");
Intent intent = new Intent(getApplicationContext(), formActivity.class);
intent.putExtra("BitmapImage", bp);
}
}
formActivity
public class formActivity extends Activity {
private static final int CAMERA_REQUEST = 1888;
private ImageView imageView;
Bitmap photo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_form);
getData();
}
private void getData(){
Bitmap bitImage=getIntent().getParcelableExtra("BitmapImage");
imageView.setImageBitmap(bitImage);
}
任何人都可以帮助我???
答案 0 :(得分:1)
Bitmap
实现Parcelable
,因此您始终可以在意图中传递它:
Intent intent = new Intent(this, NewActivity.class);
intent.putExtra("BitmapImage", bitmap);
并在另一端检索它:
Intent intent = getIntent();
Bitmap bitmap = (Bitmap) intent.getParcelableExtra("BitmapImage");
您在blackbelt评论的第一个活动中错过了startActivity(intent)
。在onActivityResult()
。
参考 https://stackoverflow.com/a/2459624/1665507
您可以在下面的链接中找到一个有效的例子,
http://androidmaterial.blogspot.in/2012/07/how-to-pass-bitmap-between-activities.html
修改强>
正如其他人评论的那样,不建议将大图像发送为Parcelable
。您也可以使用以下方法
将Bitamp
作为扩展数据传递
ByteArrayOutputStream bStream = new ByteArrayOutputStream();
//Compress it before sending it to minimize the size and quality of bitmap.
bitmap.compress(Bitmap.CompressFormat.PNG, 100, bStream);
byte[] byteArray = bStream.toByteArray();
Intent anotherIntent = new Intent(this, anotherActivity.class);
anotherIntent.putExtra("image", byteArray);
startActivity(anotherIntent);
finish();
在其他活动中检索Bitmap
if(getIntent().hasExtra("image"))
{
ImageView previewThumbnail = new ImageView(this);
Bitmap b = BitmapFactory.decodeByteArray( getIntent().getByteArrayExtra("image"),0,getIntent().getByteArrayExtra("byteArray").length);
previewThumbnail.setImageBitmap(b);
}
参考 https://stackoverflow.com/a/12908133/1665507
还有另一种方式。虽然您正在从相机或图库中拍摄照片,但您始终可以获得图像的确切URI
路径,并可以将该路径传递到其他活动。
发送大图像需要大量内存,以便根据需要选择最佳方式。
答案 1 :(得分:1)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==CAMERA_REQUEST&&resultCode==RESULT_OK) {
Bitmap bp = (Bitmap) data.getExtras().get("data");
Intent intent = new Intent(getApplicationContext(), formActivity.class);
intent.putExtra("BitmapImage", bp);
}
}
您想念startActivity(intent)
的代码段中的。另一方面,在formActivity.class
,imageView.setImageBitmap(bitImage);
之前,您必须初始化imageView
,否则您的应用会崩溃。如评论框中所述,最好提供图片的URI
,而不是将整个位图传递给formActivity
答案 2 :(得分:0)
由于问题已经很久了,所以这里的解决方案可以更好地工作,而不会造成任何压缩或质量损失,而且不必创建临时位图文件
创建一个BitmapHelper类
request(1)
}
现在可以从任何这样的活动中获取或设置位图
request(50)