Android 从照相机捕获照片并在另一活动的图像视图中显示
我想在“图像视图”中的另一个活动上显示从相机捕获的照片。但它必须是全质量的。请告诉我怎么做。这是我的代码: 主课Android 从照相机捕获照片并在另一活动的图像视图中显示,android,bitmap,android-bitmap,Android,Bitmap,Android Bitmap,我想在“图像视图”中的另一个活动上显示从相机捕获的照片。但它必须是全质量的。请告诉我怎么做。这是我的代码: 主课 private static final int REQUEST_CAMERA = 1888; Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent,REQUEST_CAMERA); protected void onA
private static final int REQUEST_CAMERA = 1888;
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent,REQUEST_CAMERA);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == REQUEST_CAMERA)
{
Uri returnUri = data.getData();
try {
Bitmap bitmapImage = MediaStore.Images.Media.getBitmap(MainActivity.this.getContentResolver(),returnUri);
Intent i = new Intent(this,ShowCameraPhotoActivity.class);
i.putExtra("image",bitmapImage);
startActivity(i);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
ShowPhotoCameraActivity.class:
ImageView showPhoto = (Imageview) findViewById(R.id.image);
Bitmap bitmap = (Bitmap) this.getIntent().getParcelableExtra("image");
if (showPhoto != null) {
showPhoto.setImageBitmap(bitmap);
}
Utils类
public static File getOutputMediaFile(int type) {
File mediaStorageDir = new File(
Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
Config.IMAGE_DIRECTORY_NAME);
if (!mediaStorageDir.exists()) {
if (!mediaStorageDir.mkdirs()) {
Log.d(Config.IMAGE_DIRECTORY_NAME, "Oops! Failed create "
+ Config.IMAGE_DIRECTORY_NAME + " directory");
return null;
}
}
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",
Locale.getDefault()).format(new Date());
File mediaFile;
if (type == Config.MEDIA_TYPE_IMAGE) {
mediaFile = new File(mediaStorageDir.getPath() + File.separator
+ "IMG_" + timeStamp + ".jpg");
} else {
return null;
}
return mediaFile;
}
public static File persistImage(Bitmap bitmap, String name) {
File filesDir = AppSingleton.getContext().getFilesDir();
File imageFile = new File(filesDir, name + ".png");
OutputStream os;
try {
os = new FileOutputStream(imageFile);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, os);
os.flush();
os.close();
} catch (Exception e) {
Log.e(AppSingleton.getContext().getClass().getSimpleName(), "Error writing bitmap", e);
}
return imageFile;
}
public static Uri getOutputMediaFileUri(int type) {
return Uri.fromFile(getOutputMediaFile(type));
}
主要活动
private static final int PICK_IMAGE_REQUEST = 2;
private static final int CAMERA_CAPTURE_IMAGE_REQUEST_CODE = 100;
private Uri fileUri;
Bitmap bitmap2;
/**
* Cature image
*/
private void captureImage() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
fileUri = Utils.getOutputMediaFileUri(Config.MEDIA_TYPE_IMAGE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
String imagePath = getImagePath(data.getData());
if (imagePath != null) {
Intent intent = new Intent(this, PreviewActivity.class);
intent.putExtra(IMAGE_PATH, imagePath);
startActivity(intent);
}
}
}
}
第二项活动
在onCreate()中
Utils类
public static File getOutputMediaFile(int type) {
File mediaStorageDir = new File(
Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
Config.IMAGE_DIRECTORY_NAME);
if (!mediaStorageDir.exists()) {
if (!mediaStorageDir.mkdirs()) {
Log.d(Config.IMAGE_DIRECTORY_NAME, "Oops! Failed create "
+ Config.IMAGE_DIRECTORY_NAME + " directory");
return null;
}
}
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",
Locale.getDefault()).format(new Date());
File mediaFile;
if (type == Config.MEDIA_TYPE_IMAGE) {
mediaFile = new File(mediaStorageDir.getPath() + File.separator
+ "IMG_" + timeStamp + ".jpg");
} else {
return null;
}
return mediaFile;
}
public static File persistImage(Bitmap bitmap, String name) {
File filesDir = AppSingleton.getContext().getFilesDir();
File imageFile = new File(filesDir, name + ".png");
OutputStream os;
try {
os = new FileOutputStream(imageFile);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, os);
os.flush();
os.close();
} catch (Exception e) {
Log.e(AppSingleton.getContext().getClass().getSimpleName(), "Error writing bitmap", e);
}
return imageFile;
}
public static Uri getOutputMediaFileUri(int type) {
return Uri.fromFile(getOutputMediaFile(type));
}
主要活动
private static final int PICK_IMAGE_REQUEST = 2;
private static final int CAMERA_CAPTURE_IMAGE_REQUEST_CODE = 100;
private Uri fileUri;
Bitmap bitmap2;
/**
* Cature image
*/
private void captureImage() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
fileUri = Utils.getOutputMediaFileUri(Config.MEDIA_TYPE_IMAGE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
String imagePath = getImagePath(data.getData());
if (imagePath != null) {
Intent intent = new Intent(this, PreviewActivity.class);
intent.putExtra(IMAGE_PATH, imagePath);
startActivity(intent);
}
}
}
}
第二项活动
在onCreate()中
你可以这样做。用于打开相机
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 0);
拍照后,您可以这样在onActivityResult()方法中收集数据
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
String filePath;
Bitmap bitmap = null;
if (requestCode == REQUEST_FROM_CAMERA && resultCode == RESULT_OK) {
bitmap = (Bitmap) data.getExtras().get("data");
Intent intent = new Intent(anotherActivity.class)
intent.putExtra(Intent.EXTRA_STREAM, Uri.parse ("file://" + filePath));
startActivity(intent);
}
然后新的活动就是这样做的
Intent intent = getIntent();
Uri uri = (Uri) intent.getExtras().get(Intent.EXTRA_STREAM);
imageView.setImageURI(imgUri);
你可以这样做。用于打开相机
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 0);
拍照后,您可以这样在onActivityResult()方法中收集数据
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
String filePath;
Bitmap bitmap = null;
if (requestCode == REQUEST_FROM_CAMERA && resultCode == RESULT_OK) {
bitmap = (Bitmap) data.getExtras().get("data");
Intent intent = new Intent(anotherActivity.class)
intent.putExtra(Intent.EXTRA_STREAM, Uri.parse ("file://" + filePath));
startActivity(intent);
}
然后新的活动就是这样做的
Intent intent = getIntent();
Uri uri = (Uri) intent.getExtras().get(Intent.EXTRA_STREAM);
imageView.setImageURI(imgUri);
您的答案不一致,导致崩溃 全局变量:
private static final int REQUEST\u CAMERA=1888代码>
调用照相机的函数:
private void camera(){
Intent intent = (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT)
? new Intent(MediaStore.ACTION_IMAGE_CAPTURE_SECURE)
: new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent,REQUEST_CAMERA);
}
另一种@Override
方法用于对ActivityResult进行结果处理:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == REQUEST_CAMERA)
{
try {
Bitmap bitmapImage = (Bitmap)data.getExtra("data");
Intent i = new Intent(this,ShowCameraPhotoActivity.class);
i.putExtra("image",bitmapImage);
startActivity(i);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
必须在Manifest.xml
<uses-permission android:name="android.permission.CAMERA"/>
您的答案不一致,导致崩溃
全局变量:private static final int REQUEST\u CAMERA=1888代码>
调用照相机的函数:
private void camera(){
Intent intent = (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT)
? new Intent(MediaStore.ACTION_IMAGE_CAPTURE_SECURE)
: new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent,REQUEST_CAMERA);
}
另一种@Override
方法用于对ActivityResult进行结果处理:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == REQUEST_CAMERA)
{
try {
Bitmap bitmapImage = (Bitmap)data.getExtra("data");
Intent i = new Intent(this,ShowCameraPhotoActivity.class);
i.putExtra("image",bitmapImage);
startActivity(i);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
必须在Manifest.xml
<uses-permission android:name="android.permission.CAMERA"/>
您可以使用firebase存储图像,并使用图像url在您选择的任何活动中加载图像
我在我的应用程序中使用了这个tut
您可以使用毕加索或glide库加载图像
private DatabaseReference reference;
private ImageView image_profile;
image_profile = (ImageView) findViewById(R.id.image_profile);
reference = FirebaseDatabase.getInstance().getReference();
Query query = reference.child("Pictures");
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
String url = snapshot.child("imageurl").getValue().toString();
if (!url.isEmpty())
{
Picasso.get()
.load(url)
.into(image_profile);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
您可以使用firebase存储图像,并使用图像url在您选择的任何活动中加载图像
我在我的应用程序中使用了这个tut
您可以使用毕加索或glide库加载图像
private DatabaseReference reference;
private ImageView image_profile;
image_profile = (ImageView) findViewById(R.id.image_profile);
reference = FirebaseDatabase.getInstance().getReference();
Query query = reference.child("Pictures");
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
String url = snapshot.child("imageurl").getValue().toString();
if (!url.isEmpty())
{
Picasso.get()
.load(url)
.into(image_profile);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
@G.Al使用上下文创建singleton类或将这些方法移动到您的活动中对不起,前面没有提到,但在IMAGE\u DiRECTORY\u NAME和MEDIA\u TYPE中也会出现错误_IMAGE@G.Al公共静态最终int媒体类型图像=1;公共静态最终字符串IMAGE\u DIRECTORY\u NAME=“OwoCar”;定义这些变量我不知道。它不起作用,有很多错误。也许你有一个更简单的解决方案。@G.Al如果你以前找不到解决方案,我会稍后回答你。实际上,这是工作代码,只是类的一些问题think@G.Al使用上下文创建singleton类,或者将这些方法移动到您的活动中对不起,前面没有提到,但是它在IMAGE\u目录\u NAME和MEDIA\u TYPE中也给了我一个错误_IMAGE@G.Al公共静态最终int媒体类型图像=1;公共静态最终字符串IMAGE\u DIRECTORY\u NAME=“OwoCar”;定义这些变量我不知道。它不起作用,有很多错误。也许你有一个更简单的解决方案。@G.Al如果你以前找不到解决方案,我会稍后回答你。实际上这是工作代码只是类分布的一些问题我想你能解释一下MediaStore.Images.Media.GetBitBitmap(这个,…)吗它显示了一个错误使用这个位图bitmapImage=MediaStore.Images.Media.GetBitBitmap(MainActivity.this.getContentResolver(),returnUri)代码>@G.Al添加try-catch块并运行,发生这种情况是因为它可能会在某个时间引发异常。因此,在代码周围添加try-catch块(单击红色灯泡它会自动添加;))是是。。在我发表评论10秒钟后,我发现了这一点:P。但它再次显示了一个错误。。我尝试了一切:/原因是:java.lang.RuntimeException:未能将结果ResultInfo{who=null,request=1,result=-1,data=Intent{act=inline data(has extras)}}传递到活动{com.example.ga.photoeditor/com.example.ga.photoeditor.MainActivity}:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String android.net.Uri.getScheme()”,请再次发布您的代码,因为我将在此处编译并告知您。更新有问题的代码您能给我解释一下MediaStore.Images.Media.GetBitBitmap(此…)吗?它向我显示了一个错误使用此位图bitmapImage=MediaStore.Images.Media.GetBitBitmap(MainActivity.this.getContentResolver(),returnUri)代码>@G.Al添加try-catch块并运行,发生这种情况是因为它可能会在某个时间引发异常。因此,在代码周围添加try-catch块(单击红色灯泡它会自动添加;))是是。。在我发表评论10秒钟后,我发现了这一点:P。但它再次显示了一个错误。。我尝试了一切:/原因是:java.lang.RuntimeException:未能将结果ResultInfo{who=null,request=1,result=-1,data=Intent{act=inline data(has extras)}}传递到活动{com.example.ga.photoeditor/com.example.ga.photoeditor.MainActivity}:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String android.net.Uri.getScheme()”,请再次发布您的代码,因为我将在此处编译并告知您。在questionValue文件路径中更新代码始终为空!!什么是“imgUri”?我用uri替换了imgUri!!但它再次向我显示了一个由以下原因引起的错误:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String android.net.Uri.getScheme()”。值filePath始终为空!!什么是“imgUri”?我用uri替换了imgUri!!但它再次向我显示了一个由以下原因引起的错误:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String android.net.Uri.getScheme()”