




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android关于图片的处理
一、布局中显示图片在布局的xml中布局图片的时候用ImageView,用src去指定图片所在位置。如下代码所示,指定的就是工程目录(/res/drawable)中文件名为unknown.png的图片。这里要注意的是AndroidStudio在布局时只认png格式的图片,即使是jpeg格式,仅把后缀改为png也不行,编译时会不通过。<ImageView
android:id="@+id/iv_mytest"
android:src="@drawable/unknown"/>但是,也不等于jpeg格式的图片就不能显示,我们可以通过如下代码处理的方式来展示到界面上。StringimgPath=Environment.getExternalStorageDirectory()+"test.jpg";
ImageViewiv_mytest=(ImageView)findViewById(R.id.iv_mytest);
iv_mytest.setVisibility(View.VISIBLE);
if(!imgPath.equals("")){
BitmaptempBitmap=BitmapFactory.decodeFile(imgPath);
iv_mytest.setImageBitmap(tempBitmap);//显示图片
}二、拍照后显示图片拍照流程为获取缓存图片路径->进入拍照界面->拍照界面拍照后自动存到缓存图片路径中->进入回调函数->对缓存图片进行处理(如旋转缩放等)并存储到自己指定位置->删除缓存路径图片。具体代码如下所示:privateStringtmpfilename="";
//调用拍照界面
privatevoidphotograph(){
try{
//跳转至拍照界面
StringsdStatus=Environment.getExternalStorageState();
if(!sdStatus.equals(Environment.MEDIA_MOUNTED)){//检测sd是否可用
ToastUtil.showToastMsgError(MyTestActivity.this,"SDcardisnotavaiable/writeablerightnow.");
return;
}
tmpfilename=getTempFilePath();
Fileout=newFile(tmpfilename);
IntentintentPhote=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);
if(Build.VERSION.SDK_INT>=24){
//临时添加一个拍照权限
intentPhote.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
//通过FileProvider获取uri
contentUri=FileProvider.getUriForFile(getActivity(),
"ernet.fileProvider",out);
intentPhote.putExtra(MediaStore.EXTRA_OUTPUT,contentUri);
}else{
mImageCaptureUri=Uri.fromFile(out);
intentPhote.putExtra(MediaStore.EXTRA_OUTPUT,mImageCaptureUri);
}
startActivityForResult(intentPhote,1);
}catch(Exceptione){
}
}
/**
*获取原缓存图片存储路径
*@return
*/
privateStringgetTempFilePath(){
//照片全路径
StringfileName="";
//文件夹路径
StringpathUrl=Environment.getExternalStorageDirectory()+"/tmp/";
imagename="mytest.png";
Filefile=newFile(pathUrl);
file.mkdirs();//创建文件夹
fileName=pathUrl+imagename;
returnfileName;
}
//拍取照后的回调
@Override
publicvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
super.onActivityResult(requestCode,resultCode,data);
if(requestCode==1&&resultCode==Activity.RESULT_OK){
BitmapFactory.Optionsoptions=newBitmapFactory.Options();
options.inJustDecodeBounds=true;//设置了此属性一定要记得将值设置为false
Bitmapbitmap=BitmapFactory.decodeFile(tmpfilename);
//防止OOM发生
options.inJustDecodeBounds=false;
saveMyBitmap(imagename,bitmap);
Fileold=newFile(Environment.getExternalStorageDirectory()+"/tmp/");
FileUtil.deleteFile(old);//删除缓存图片
StringresultMsg="图片已保存";
ToastUtil.showToastMsgSuccess(this,resultMsg);
}
}
//将图像保存到SD卡中
publicvoidsaveMyBitmap(StringbitName,BitmapmBitmap){
StringthisDate=formatter_date.format(newDate());
Filef=FileUtil.getFilePath(Environment.getExternalStorageDirectory()+"/rfid/prehairpin/"+thisDate+"/",bitName);
Stringrealfilepath=f.getPath();
FileOutputStreamfOut=null;
try{
fOut=newFileOutputStream(f);
}catch(Exceptione){
e.printStackTrace();
}
Matrixmatrix=newMatrix();
//按照固定大小对图片进行缩放
matrix.postScale(0.3f,0.3f);
System.out.println(mBitmap.getWidth()+mBitmap.getHeight());
if(mBitmap.getHeight()<mBitmap.getWidth()){
matrix.postRotate(90);//翻转90度
}
mBitmap=Bitmap.createBitmap(mBitmap,0,0,mBitmap.getWidth(),mBitmap.getHeight(),matrix,true);
mBpress(Bitmap.CompressFormat.PNG,100,fOut);
try{
fOut.write(("mysecretmessage").getBytes());//我在这边偷偷给图片结尾藏了一些信息
fOut.flush();
}catch(IOExceptione){
e.printStackTrace();
}
try{
fOut.close();
}catch(IOExceptione){
e.printStackTrace();
}
}三、图片的处理旋转、缩放等操作我们是通过Matrix来处理的,Matrix还有很多其他图形处理的方法,可以另开一篇去讲述。Matrixmatrix=newMatrix();
//按照固定大小对图片进行缩放
matrix.postScale(0.3f,0.3f);
if(mBitmap.getHeight()<mBitmap.getWidth()){
matrix.postRotate(90);//翻转90度
}
mBitmap=Bitmap.createBitmap(mBitmap,0,0,mBitmap.getWidth(),mBitmap.getHeight(),matrix,true);
mBpress(Bitmap.CompressFormat.PNG,100,fOut);上面是按比例缩小,下面是按固定分辨率缩放Matrixmatrix=newMatrix();
intdstWidth=800;
intdstHeight=600;
if(mBitmap.getHeight()>mBitmap.getWidth()){
matrix.postRotate(90);//翻转90度
finalfloatsx=dstWidth/(float)mBitmap.getHeight();
finalfloatsy=dstHeight/(float)mBitmap.getWidth();
matrix.postScale(sx,sy);
}else{
finalfloatsx=dstWidth/(float)mBitmap.getWidth();
finalfloatsy=dstHeight/(float)mBitmap.getHeight();
matrix.postScale(sx,sy);
}
BitmapendBit=Bitmap.createBitmap(mBitmap,0,0,mBitmap.getWidth(),mBitmap.getHeight(),matrix,true);
endBpress(Bitmap.CompressFormat.JPEG,100,fOut);//jpeg格式缩放的图片大小基本只占png的一半保存图片,并将字符存入图片(有时候拍照后希望将一些信息与图片绑定起来,直接记录文件名又担心被人篡改,就想到了这种在图片文件末尾记录一些信息的方式)StringthisDate=formatter_date.format(newDate());
Filef=FileUtil.getFilePath(Environment.getExternalStorageDirectory()+"/rfid/prehairpin/"+thisDate+"/",bitName);
Stringrealfilepath=f.getPath();
FileOutputStreamfOut=nu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 防洪提勘察设计合同范本
- 狗子领养合同协议书范本
- 美容店长工资合同协议书
- 求合作协议需要几份合同
- 签了补充协议没签主合同
- 首付房屋转让协议书范本
- 电工安全施工合同协议书
- 能效管理合同协议书范本
- 法院判决房屋赔偿协议书
- 生产质量安全协议书范本
- 热电厂2空预器大修施工方案
- 十二岁套面圈的顺口溜大全
- 中国儿童严重过敏反应诊断与治疗建议(2022年)解读
- 卡吉斯铸铁锅炉
- 钢箱拱钢箱梁吊装施工方案
- GB/T 23821-2022机械安全防止上下肢触及危险区的安全距离
- GB/T 25980-2010道路车辆旅居挂车和轻型挂车的连接球尺寸
- GB/T 24218.1-2009纺织品非织造布试验方法第1部分:单位面积质量的测定
- GB/T 1633-2000热塑性塑料维卡软化温度(VST)的测定
- 手术讲解模板:肩关节全部置换术课件
- 食堂伙食收据样稿
评论
0/150
提交评论