如何放置相机图像而不是可绘制图像?
Posted
技术标签:
【中文标题】如何放置相机图像而不是可绘制图像?【英文标题】:How can I place camera image instead of drawable image? 【发布时间】:2017-12-20 12:24:40 【问题描述】:我只是编程新手。我只想在第二个活动中放置我的捕获图像而不是可绘制图像。我需要以下 imagePath 的帮助.. 代码
主活动
Button btn_cam = (Button) findViewById(R.id.btn_cam);
btn_cam.setOnClickListener(new View.OnClickListener()
public void onClick(View v)
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
file = new File(MainActivity.this.getExternalCacheDir(),
String.valueOf(System.currentTimeMillis()) + ".jpg");
fileUri = Uri.fromFile(file);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
MainActivity.this.startActivityForResult(intent, CAMERA_PIC_REQUEST);
);
protected void onActivityResult(int requestCode, int resultCode, Intent data)
if (requestCode == CAMERA_PIC_REQUEST && resultCode == RESULT_OK)
fileUri = data.getData();
Intent cam = new Intent(this, MainCam.class);
cam.putExtra("flostic", fileUri.toString());
startActivity(cam);
this.finish();
第二个活动
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap bitmap = BitmapFactory.decodeFile(image_path, options);
view.setImageBitmap(bitmap);
【问题讨论】:
有什么问题?您是否有任何异常或代码不起作用?请提供您在第二个活动中获得 Intent 的代码。 我想知道如何获取图像路径 mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image).copy(Bitmap.Config.ARGB_8888, true);这是我想用相机图像代替可绘制的代码 【参考方案1】:根据您的评论,您希望在第二个活动中获取图像路径。这是关键的路线。
String image_path = getIntent().getStringExtra("flostic");
以下是完整代码。
第一个活动:
Button btnCam = (Button) findViewById(R.id.btn_cam);
btnCam.setOnClickListener(new View.OnClickListener()
public void onClick(View v)
File file = new File(Environment.getExternalStorageDirectory(),
String.valueOf(System.currentTimeMillis()) + ".jpg");
Uri fileUri = Uri.fromFile(file);
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
i.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(i, CAMERA_PIC_REQUEST);
);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == CAMERA_PIC_REQUEST && resultCode == RESULT_OK)
Intent cam = new Intent(this, MainCam.class);
cam.putExtra("flostic", data.getDate().toString());
startActivity(cam);
finish();
第二个活动:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout):
ImageView view = (ImageView) findView(R.id.your_image_view);
Intent i = getIntent();
String imagePath = i.getStringExtra("flostic");
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap bitmap = BitmapFactory.decodeFile(imagePath, options);
view.setImageBitmap(bitmap);
【讨论】:
我添加了这个 Intent getIntent = getIntent();还是不行 您正在使用 Intent 将图像路径从第一个活动传递到第二个活动,并且您必须在第二个活动中从 Intent 对象中提取图像路径。请看一下这个答案:***.com/questions/6707900/… 你能给我一个示例解决方案吗?请。 我已经解决了这个问题。我使用意图来调用图像。哈哈。但它现在有效。谢谢你的时间【参考方案2】:首先在清单中添加这些权限
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
如果您的 android 版本高于 lolipop,则为您的应用添加运行时权限。 See Documentation here
MainActivity
把 onClickListener() 放到你的相机按钮上
btn_cam.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 1);
);
然后在onActivityResult()
中像这样从选定的图像 URI 中获取图像路径
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
Uri uri=data.getData();
switch (requestCode)
case 1:
if (resultCode==RESULT_OK)
String path=getRealPathFromURI(uri);
Toast.makeText(this, ""+path, Toast.LENGTH_SHORT).show();
Intent intent=new Intent(this,SecondActivity.class);
intent.putExtra("imagepath",path);
startActivity(intent);
包括getRealPathFromURI()
方法,该方法返回通过相机拍摄的图像的路径。使用intent.putExtra()
将图像路径发送到第二个活动。
public String getRealPathFromURI(Uri uri)
String[] projection = MediaStore.Images.Media.DATA ;
@SuppressWarnings("deprecation")
Cursor cursor = managedQuery(uri, projection, null, null, null);
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
此代码适用于SecondActivity
然后在您的第二个活动中从第一个活动中获取数据(图像路径)并将其存储在字符串变量中并从该图像路径创建位图并将位图图像设置为您的图像视图
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_next);
String imagepath=getIntent().getExtras().getString("imagepath");
File image_path=new File(imagepath);
if (image_path.exists())
Bitmap imageBitmap = BitmapFactory.decodeFile(image_path.getAbsolutePath());
ImageView imageView = (ImageView) findViewById(R.id.imageselect);
imageView.setImageBitmap(imageBitmap);
这是您如何在第一个活动中拍摄的第二个活动中显示相机图像
【讨论】:
捕获应用程序崩溃后 您是否在清单中授予了相机和 write_external_storage 权限?这是工作代码,我在此处发布之前再次对其进行了测试。如果它崩溃了,那么你错过了一些东西。如果您在 marshmellow 上运行应用程序,则授予您的应用程序权限,例如设置>应用程序>选择您的应用程序>向下滚动,您将权限单击它>切换所需的权限(注意:要执行此操作,您还必须在您的首先是android清单)。如果它仍然崩溃,然后发布 logcat。 你能在调用这个错误的地方发布活动代码吗?? 我需要调整图片大小吗? 您好,很抱歉,由于工作繁忙,我无法解决您的问题。如果我的回答解决了您的问题,请将其标记为已回答或点赞。谢谢。以上是关于如何放置相机图像而不是可绘制图像?的主要内容,如果未能解决你的问题,请参考以下文章
Android - 如何放置一个从 SD 卡或相机胶卷加载图像的图像视图?