Android关于图片的处理

  

一、布局中显示图片
在布局的xml中布局图片的时候用ImageView,用src去指定图片所在位置。如下代码所示,指定的就是工程目录(/res/可拉的)中文件名为未知。png的图片。
这里要注意的是Android工作室在布局时<强>只认png格式强的图片,即使是jpeg格式,仅把后缀改为png也不行,编译时会不通过。

  
 <代码> & lt; ImageView
  android: id=癅 + id/iv_mytest”
  未知android: src=" https://www.yisu.com/zixun/@drawable "/祝辞 
  

但是,也不等于jpeg格式的图片就不能显示,我们可以通过如下代码处理的方式来展示到界面上。

  
 <代码>字符串imgPath=Environment.getExternalStorageDirectory () +“test.jpg”;
  ImageView iv_mytest=(ImageView) findViewById (R.id.iv_mytest);
  iv_mytest.setVisibility (View.VISIBLE);
  如果(! imgPath.equals (" ")) {
  位图tempBitmap=BitmapFactory.decodeFile (imgPath);
  iv_mytest.setImageBitmap (tempBitmap);//显示图片
  } 
  

二,拍照后显示图片
拍照流程为获取缓存图片路径→进入拍照界面→拍照界面拍照后自动存到缓存图片路径中→进入回调函数→对缓存图片进行处理(如旋转缩放等)并存储到自己指定位置→删除缓存路径图片。
具体代码如下所示:

  
 <代码>私人字符串tmpfilename=" ";//调用拍照界面
  私人空间照片(){
  尝试{//跳转至拍照界面
  字符串sdStatus=Environment.getExternalStorageState ();
  如果(! sdStatus.equals (Environment.MEDIA_MOUNTED)){//检测sd是否可用
  ToastUtil.showToastMsgError (MyTestActivity。这一点,“SD卡不是、/可写吧。”);
  返回;
  }
  
  tmpfilename=getTempFilePath ();=新文件(tmpfilename);
  
  意图intentPhote=new意图(MediaStore.ACTION_IMAGE_CAPTURE);
  
  如果(Build.VERSION。SDK_INT祝辞=24){//临时添加一个拍照权限
  intentPhote.addFlags (Intent.FLAG_GRANT_READ_URI_PERMISSION);//通过FileProvider获取uri
  contentUri=FileProvider.getUriForFile (getActivity (),
  “com.tmri.rfid.eri.internet.fileProvider”);
  intentPhote.putExtra (MediaStore。EXTRA_OUTPUT contentUri);
  其他}{
  mImageCaptureUri=Uri.fromFile(出);
  intentPhote.putExtra (MediaStore。EXTRA_OUTPUT mImageCaptureUri);
  }
  
  startActivityForResult (intentPhote, 1);
  }捕捉(异常e) {
  
  }
  }/* *
  *获取原缓存图片存储路径
  * @return
  */私人字符串getTempFilePath () {//照片全路径
  字符串文件名=" ";//文件夹路径
  字符串pathUrl=Environment.getExternalStorageDirectory () +“/tmp/?
  
  imagename=" mytest.png”;
  文件文件=新文件(pathUrl);
  file.mkdirs();//创建文件夹
  文件名=pathUrl + imagename;
  返回文件名;
  }//拍取照后的回调
  @Override
  公共空间onActivityResult (int, int requestCode resultCode,意图数据){
  超级。onActivityResult (requestCode、resultCode、数据);
  如果(requestCode==1,,resultCode==Activity.RESULT_OK) {
  BitmapFactory。选择选项=new BitmapFactory.Options ();
  选项。inJustDecodeBounds=true;//设置了此属性一定要记得将值设置为假
  位图的位图=BitmapFactory.decodeFile (tmpfilename);//防止伯父发生
  选项。inJustDecodeBounds=false;
  saveMyBitmap (imagename,位图);=新老文件(Environment.getExternalStorageDirectory () +“/tmp/?;
  FileUtil.deleteFile(老);//删除缓存图片
  
  字符串resultMsg="图片已保存”;
  ToastUtil。showToastMsgSuccess(这个,resultMsg);
  }
  }//将图像保存到SD卡中
  公共空间saveMyBitmap(字符串bitName,位图mBitmap) {
  字符串thisDate=formatter_date。格式(新日期());
  文件f=FileUtil.getFilePath (Environment.getExternalStorageDirectory () +“/rfid/prehairpin/? thisDate +“/? bitName);
  字符串realfilepath=f.getPath ();
  FileOutputStream输出信号=零;
  尝试{
  输出信号=new FileOutputStream (f);
  }捕捉(异常e) {
  e.printStackTrace ();
  }
  
  矩阵矩阵=new矩阵();//按照固定大小对图片进行缩放
  matrix.postScale (0.3, 0.3);
  mBitmap.getHeight System.out.println (mBitmap.getWidth () + ());
  如果(mBitmap.getHeight () & lt;mBitmap.getWidth ()) {
  matrix.postRotate (90);//翻转90度
  }
  mBitmap=位图。createBitmap (mBitmap 0 0, mBitmap.getWidth (), mBitmap.getHeight(),矩阵,true);
  mBitmap.compress(100年Bitmap.CompressFormat.PNG,输出端);
  
  尝试{
  输出信号。写((“我的秘密信息”).getBytes());//我在这边偷偷给图片结尾藏了一些信息
  fOut.flush ();
  }捕捉(IOException e) {
  e.printStackTrace ();
  }
  尝试{
  fOut.close ();
  }捕捉(IOException e) {
  e.printStackTrace ();
  }
  }

Android关于图片的处理