package com.gas.Securitycheck.utils;
import android.content.ContentResolver;
import android.content.Context;
import android.content.CursorLoader;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.ThumbnailUtils;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.widget.ImageView;
import com.gas.Securitycheck.Constant;
import com.gas.Securitycheck.R;
import com.gas.Securitycheck.ServiceApplication;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* Created by xinliwei on 2015/7/2.
*/
public class ImagesUtil {
public static final String TAG = "ImagesUtil.class";
/**
* 有两种办法将照片加载到bitmap中:1.通过uri用stream的方式
* @param mContext Context
* @param uri 资源uri
* @param width 加载后缩放到的目标宽度
* @param height 加载后缩放到的目标高度
* @return 加载并缩放后的位图
*/
public static Bitmap loadBitmap(Context mContext, Uri uri, int width,int
height,int mark) {
Bitmap mBitmap = null;
try {
ContentResolver resolver = mContext.getContentResolver();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.RGB_565; // FaceDetecor
只能读取RGB 565格式的Bitmap
Bitmap bitmap =
BitmapFactory.decodeStream(resolver.openInputStream(uri), null,
options);
mBitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height);
// 缩放位图到指定大小
} catch (FileNotFoundException ex) {
//Log.e(mContext.getPackageName(), "图像加载异常: " +
ex.getMessage());
MyLog.ShowLog("图像加载异常: " + ex.getMessage());
// 图片的大小是400 600
if (mark==1){
Bitmap
mBitmap1=BitmapFactory.decodeResource(ServiceApplication.getIns
tance().getResources(), R.drawable.miss_photo);
return ThumbnailUtils.extractThumbnail(mBitmap1, width,
height); // 缩放位图到指定大小
}else if (mark==0){
}
}
return mBitmap;
}
/**
* 有两种办法将照片加载到bitmap中:2.用照片的真实路径加载
* @param path 被加载的图像的路径
* @param width 加载后缩放到的目标宽度
* @param height 加载后缩放到的目标高度
* @return 加载并缩放后的位图
*/
public static Bitmap loadBitmap(String path, int width, int height) {
Bitmap mBitmap = null;
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888; // FaceDetecor只
能读取RGB 565格式的Bitmap
Bitmap bitmap = BitmapFactory.decodeFile(path, options);
mBitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height); //
缩放位图
return mBitmap;
}
// 获得照片的真实路径
public static String obtainFilePath(Context context, Uri uri){
String filePath = null;
String[] projection = { MediaStore.Images.Media.DATA };
CursorLoader loader = new CursorLoader(context, uri, projection, null,
null, null);
Cursor cursor = loader.loadInBackground();
if (cursor != null) {
cursor.moveToFirst();
filePath = cursor.getString(cursor.getColumnIndex(projection[0]));
cursor.close();
}
return filePath;
}
// 将图片保存到SD卡中 为什么这个方法总是报错 因为没有加上写内存卡的权限
public static Uri saveImage(Bitmap bitmap) throws FileNotFoundException {
//先判断手机是否装有SD卡,并可以进行读写
if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUN
TED)){
// Toast.makeText(getApplicationContext(),
// "没有SD卡,无法保存图像.", Toast.LENGTH_SHORT).show();
Log.e("ImagesUtil.java","没有SD卡,无法保存图像.");
return null;
}
//文件的保存路径
String[] file_path=new String[7];
file_path[0]="燃气工程";
file_path[1]=
ServiceApplication.getInstance().readUser().getU_RealName();
file_path[2]=
ServiceApplication.mPrefUtil.getStrSetting(Constant.SP_Id)+"-"+ServiceA
pplication.mPrefUtil.getStrSetting(Constant.AnJianCiShu);
file_path[3]=
(ServiceApplication.mPrefUtil.getStrSetting(Constant.XiaoQuMingZi)).rep
lace("#", "");
//file_path[3]=
ServiceApplication.mPrefUtil.getStrSetting(Constant.YongMuMingZi);
// file_path[4]=
ServiceApplication.mPrefUtil.getStrSetting(Constant.LouHao);
file_path[4]=
ServiceApplication.mPrefUtil.getStrSetting(Constant.DanYuanHao);
file_path[5]=
ServiceApplication.mPrefUtil.getStrSetting(Constant.YongMuMingZi);
file_path[6]=
ServiceApplication.mPrefUtil.getStrSetting("AnJianXiangId");
/* file_path[1]="朝阳区甘露园1区";
file_path[2]="6号楼";
file_path[3]="4单元";
file_path[4]="301室";*/
//文件命名的时间成分
Calendar calendar=Calendar.getInstance();
Date data=calendar.getTime();
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time=format.format(data);
// 获得外部SD卡,创建本应用程序的保存目录,保存相片
File sdCard = Environment.getExternalStorageDirectory();
// File photoDir = new1 File(sdCard.getAbsolutePath() + "/mycamera");
File photoDir = new File(sdCard.getAbsolutePath() +
"/"+file_path[0]+"/"+file_path[1]+"/"+file_path[2]+"/"+file_path[3]+"/
"+file_path[4]+"/"+file_path[5]+"/"+file_path[6]);
MyLog.ShowLog("保存图像地址"+photoDir.getAbsolutePath());
LogTxt.writeLog(photoDir.getAbsolutePath(), "图片保存的地址");
if(!photoDir.exists()){
photoDir.mkdirs();
}
// File photo = new1 File(photoDir,(new1 Date()).getTime() + ".jpeg");
File photo = new File(photoDir,"13 燃气表腐蚀老化"+time+".jpeg");
MyLog.ShowLog("创建photo文件");
FileOutputStream fOut = new FileOutputStream(photo); //这句出的bug
MyLog.ShowLog("输出流文件创建完成");
// 把数据写入文件.下面的100参数表示不压缩
bitmap.compress(Bitmap.CompressFormat.JPEG, 80, fOut);
// 解析图片的Uri,用它传递分享图片
return Uri.parse("file://" + photo.getAbsolutePath());
// Toast.makeText(this,uri.toString(),Toast.LENGTH_LONG).show();
}
// 显示缓存的图片(使用了SmartAndroid中的
com.tandong.sa.zUImageLoader.core.ImageLoader)
/* public void displayImage(String imageUrl, ImageView imageView){
DisplayImageOptions options;
options = new1 DisplayImageOptions.Builder()
.showImageOnLoading(R.mipmap.ic_launcher) // 设置图片在下
载期间显示的图片
.showImageForEmptyUri(R.mipmap.ic_launcher) // 设置图片Uri
为空或是错误的时候显示的图片
.showImageOnFail(R.mipmap.ic_launcher) // 设置图片加载
/解码过程中错误时候显示的图片
.cacheInMemory(true) // 设置下载的图片是否缓存在内存中
.cacheOnDisc(true) // 设置下载的图片是否缓存在SD卡中
.considerExifParams(true) // 是否考虑JPEG图像EXIF参数(旋转,
翻转)
.imageScaleType(ImageScaleType.EXACTLY_STRETCHED) // 设置图片
以如何的编码方式显示
.bitmapConfig(Bitmap.Config.RGB_565) // 设置图片
的解码类型
// .decodingOptions(BitmapFactory.Options decodingOptions)
//设置图片的解码配置
//.delayBeforeLoading(int delayInMillis) //int
delayInMillis为你设置的下载前的延迟时间
//.preProcessor(BitmapProcessor preProcessor) //设置图片加入
缓存前,对bitmap进行设置
.resetViewBeforeLoading(true) //设置图片在下
载前是否重置,复位
.displayer(new1 RoundedBitmapDisplayer(20)) //是否设置为圆
角,弧度为多少
.displayer(new1 FadeInBitmapDisplayer(100)) //是否图片加载
好后渐入的动画时间
.build(); // 构建完成
XlwApplication.getInstance().getImageLoader().displayImage(imageUrl,
imageView, options);
}*/
}
/*
加载图片方法:
1.直接加载:
imageLoader.displayImage(imageUrl, imageView); // imageUrl代表图片的URL地址
,imageView代表承载图片的IMAGEVIEW控件
2.加载自定义配置的一个图片:
imageLoader.displayImage(imageUrl, imageView,options); // imageUrl代表图片的
URL地址,imageView代表承载图片的IMAGEVIEW控件 , options代表DisplayImageOptions
配置文件
3.图片加载时候带加载情况的监听
imageLoader.displayImage(imageUrl, imageView, options, new1
ImageLoadingListener() {
@Override
public void onLoadingStarted() {
//开始加载的时候执行
}
@Override
public void onLoadingFailed(FailReason failReason) {
//加载失败的时候执行
}
@Override
public void onLoadingComplete(Bitmap loadedImage) {
//加载成功的时候执行
}
@Override
public void onLoadingCancelled() {
//加载取消的时候执行
}});
4.图片加载时候,带监听又带加载进度条的情况
imageLoader.displayImage(imageUrl, imageView, options, new1
ImageLoadingListener() {
@Override
public void onLoadingStarted() {
//开始加载的时候执行
}
@Override
public void onLoadingFailed(FailReason failReason) {
//加载失败的时候执行
}
@Override
public void onLoadingComplete(Bitmap loadedImage) {
//加载成功的时候执行
}
@Override
public void onLoadingCancelled() {
//加载取消的时候执行
},new1 ImageLoadingProgressListener() {
@Override
public void onProgressUpdate(String imageUri, View view, int current,int
total) {
//在这里更新 ProgressBar的进度信息
}
});
*/
/*
加载本地图片:
String imageUri = "http://site.com/image.png"; // from Web
String imageUri = "file:///mnt/sdcard/image.png"; // from SD card 这个方法可
能不对
String imageUri = "content://media/external/audio/albumart/13"; // from
content provider
String imageUri = "assets://image.png"; // from assets
String imageUri = "drawable://" + R.drawable.image; // from drawables (only
images, non-9patch)
*/