Android(安卓)studio使用相机拍照,保存并显示一坨屎一样的照片
16lz
2021-01-26
呼叫相机
文件的创建
在Android项目开发多多少少都会需要用到相机的功能,这里我会使用最基本的方法调用相机进行拍照和保存到自定义的目录,最后在应用中显示拍照的结果
MainActivity.java:
import android.Manifest;import android.content.Intent;import android.content.pm.PackageManager;import android.graphics.Bitmap;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.ImageView;import android.widget.Toast;import android.widget.VideoView;import androidx.appcompat.app.AppCompatActivity;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.Random;public class MainActivity extends AppCompatActivity { private Button buttonImage; private ImageView imageView; private static final int REQUEST_ID_READ_WRITE_PERMISSION = 99; private static final int REQUEST_ID_IMAGE_CAPTURE = 100; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);// this.buttonImage = (Button) this.findViewById(R.id.button_image); this.imageView = (ImageView) this.findViewById(R.id.imageView); this.buttonImage.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { captureImage(); } });//呼叫照相方法 } // private void captureImage() { // Create an implicit intent, for image capture. Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // Start camera and wait for the results. this.startActivityForResult(intent, REQUEST_ID_IMAGE_CAPTURE); }//执行相机的调用 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {//调用完相机并拍照后会执行 //第二个 Activity 指定的结果代码。 // 如果操作成功,此为 RESULT_OK;如果用户退出或操作出于某种原因失败,则是 RESULT_CANCELED super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_ID_IMAGE_CAPTURE) { if (resultCode == RESULT_OK) { //请求使用照相,而且用户同意使用相机权限 Bitmap bp = (Bitmap) data.getExtras().get("data"); //得到intent返回的信息 //保存图片等信息 this.imageView.setImageBitmap(bp); //设置照片成果 save(bp); //调用创建文件 } else if (resultCode == RESULT_CANCELED) { //用户不授权使用照相机 Toast.makeText(this, "Action canceled", Toast.LENGTH_LONG).show(); } else { Toast.makeText(this, "Action Failed", Toast.LENGTH_LONG).show(); //不授权使用相机和请求码不是request image } } // } private void save(Bitmap bp) { File Pdirectory = new File(Environment.getExternalStorageDirectory()+File.separator+"草泥马"); Random generator = new Random(); int n = 10000; n = generator.nextInt(n); String fname = "Image-" + n + ".jpg"; File file = new File(Pdirectory,fname); //在目录下添加东西 Pdirectory.mkdirs(); //创建草泥马目录 try{ FileOutputStream out = new FileOutputStream(file); bp.compress(Bitmap.CompressFormat.JPEG,100,out); out.flush(); out.close(); //compress(Bitmap.CompressFormat format, int quality, OutputStream stream) } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } //}
添加权限:
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
这时候打开相机拍照后会显示拍照结果,而且在手机下会多出一个名叫草泥马的目录,里面保存着我们拍照的结果,但不细心的同学应该发现照片的画质比较模糊像屎一样,这是因为用这种方法拍照后的照片是经过压缩的,如果照片被放大那么画质会失真,对于拍照并保存完整的照片在安卓7.0版本后需要用到provider,稍后我会进行介绍
更多相关文章
- android中相机支持功能查看
- Android中实现长按照片弹出右键菜单
- android上层得到底层数据的回调机制
- Android、H5 单独调起拍照与摄像
- Android(安卓)SurfaceView 图像拉伸
- Android自定义照相机实现 拍照 录像
- Android高仿微信相册选择器 多图片选择器、拍照
- android拍照获得图片及获得图片后剪切设置到ImageView
- android 拍照截取 部分照片(拍照截取行驶证)