Java 从camera Intent检索图像URI并将图像设置为Imageview
我正在尝试检索图像URI并将图像设置为Imageview…但每次我尝试时,图像视图上都会出现一个黑色图像 下面是我的代码:- //摄像机意图Java 从camera Intent检索图像URI并将图像设置为Imageview,java,android,android-intent,Java,Android,Android Intent,我正在尝试检索图像URI并将图像设置为Imageview…但每次我尝试时,图像视图上都会出现一个黑色图像 下面是我的代码:- //摄像机意图 Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,mImageCaptureUri); startActivityForResult(i, request); 从摄像机获取数据 Bundl
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,mImageCaptureUri);
startActivityForResult(i, request);
从摄像机获取数据
Bundle extra = data.getExtras();
Bitmap photos =(Bitmap)extra.get("data");
String path=getOriginalImagePath();
File f = new File(path); //
ImageURI = Uri.fromFile(f);
showpotos.setImageURI(ImageURI);
public String getOriginalImagePath() {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = Profile_details.this.managedQuery(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection, null, null, null);
int column_index_data = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToLast();
return cursor.getString(column_index_data);
}
如何解决这个问题……请帮助删除第二个代码列表中的所有内容
在onActivityResult()的
中,从mImageCaptureUri
加载图像。这就是您告诉相机应用程序保存图像的地方。删除第二个代码列表中的所有内容
在onActivityResult()的中,从mImageCaptureUri
加载图像。这就是您告诉相机应用程序保存图像的地方。您好,请使用以下代码:-
打开摄像机的意图:-
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// Declare mUri as globel varibale in class
mUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "pic_"+ String.valueOf(System.currentTimeMillis()) + ".jpg"));
intent.putExtra(MediaStore.EXTRA_OUTPUT, mUri);
startActivityForResult(intent, 1);
ActivityResult函数中的代码:-
if(requestCode==1) {
image_str =getRealPathFromURI(mUri).toString();
try {
Picasso.with(getApplicationContext()).load(mUri)into(Imageview1);
} catch (Exception e) {
e.printStackTrace();
}
}
函数获取图像的实际路径:-
public String getRealPathFromURI(Uri contentUri)
{
try
{
String[] proj = {MediaStore.Images.Media.DATA};
Cursor cursor = managedQuery(contentUri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
System.out.println("column_index of selected image is:"+column_index);
cursor.moveToFirst();
System.out.println("selected image path is:"+cursor.getString(column_index));
return cursor.getString(column_index);
}
catch (Exception e)
{
return contentUri.getPath();
}
}
并在清单文件中声明以下权限:-
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
你好,请使用以下代码:-
打开摄像机的意图:-
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// Declare mUri as globel varibale in class
mUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "pic_"+ String.valueOf(System.currentTimeMillis()) + ".jpg"));
intent.putExtra(MediaStore.EXTRA_OUTPUT, mUri);
startActivityForResult(intent, 1);
ActivityResult函数中的代码:-
if(requestCode==1) {
image_str =getRealPathFromURI(mUri).toString();
try {
Picasso.with(getApplicationContext()).load(mUri)into(Imageview1);
} catch (Exception e) {
e.printStackTrace();
}
}
函数获取图像的实际路径:-
public String getRealPathFromURI(Uri contentUri)
{
try
{
String[] proj = {MediaStore.Images.Media.DATA};
Cursor cursor = managedQuery(contentUri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
System.out.println("column_index of selected image is:"+column_index);
cursor.moveToFirst();
System.out.println("selected image path is:"+cursor.getString(column_index));
return cursor.getString(column_index);
}
catch (Exception e)
{
return contentUri.getPath();
}
}
并在清单文件中声明以下权限:-
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
下面是我使用过的,它很有效。如果您仍在寻找解决方案,您可能希望尝试一下
public void takePicture(View view) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
file = Uri.fromFile(getOutputMediaFile());
intent.putExtra(MediaStore.EXTRA_OUTPUT, file);
startActivityForResult(intent, 100);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent
data) {
if (requestCode == 100) {
if (resultCode == RESULT_OK) {
imageView.setImageURI(file);
}
}
}
下面是我使用过的,它是有效的。如果您仍在寻找解决方案,您可能希望尝试一下
public void takePicture(View view) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
file = Uri.fromFile(getOutputMediaFile());
intent.putExtra(MediaStore.EXTRA_OUTPUT, file);
startActivityForResult(intent, 100);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent
data) {
if (requestCode == 100) {
if (resultCode == RESULT_OK) {
imageView.setImageURI(file);
}
}
}
试试这个解决方案
将这些权限放入清单中
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="true" />
获取捕获的图像
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
Bitmap imageBitmap = (Bitmap) extras.get("data");
Imview.setImageBitmap(imageBitmap);
// CALL THIS METHOD TO GET THE URI FROM THE BITMAP
Uri tempUri = getImageUri(getApplicationContext(), imageBitmap);
//DO SOMETHING WITH URI
}
}
方法获取图像URI
public Uri getImageUri(Context inContext, Bitmap inImage) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
String path = Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
return Uri.parse(path);
}
试试这个解决方案
将这些权限放入清单中
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="true" />
获取捕获的图像
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
Bitmap imageBitmap = (Bitmap) extras.get("data");
Imview.setImageBitmap(imageBitmap);
// CALL THIS METHOD TO GET THE URI FROM THE BITMAP
Uri tempUri = getImageUri(getApplicationContext(), imageBitmap);
//DO SOMETHING WITH URI
}
}
方法获取图像URI
public Uri getImageUri(Context inContext, Bitmap inImage) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
String path = Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
return Uri.parse(path);
}
首先,不要直接从Uri
解码位图。您可能会陷入内存问题。而是使用图像加载程序,如Glide
,Picasso
等。首先,不要直接从Uri
解码位图。您可能会陷入内存问题。相反,请使用图像加载器,如Glide
,Picasso
等@akshaydeplamba:确保在配置更改过程中(例如,通过保存的实例状态捆绑包
)保留此值。请参阅@Akshaydeplamba:确保在配置更改过程中(例如,通过保存的实例状态捆绑包
)保持此值不变。请参见但getOutputMediaFile()是什么?但getOutputMediaFile()是什么?此答案以及添加一些代码以擦除onDestroy上的临时文件。saved my week!这个答案连同添加一些代码来删除onDestroy上的临时文件一起保存了我的一周!