版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论