android 图片过大 分辨率问题

这几天作IM的时候,遇到几个问题,当时怎么也没想通,可能自己还算入门级菜鸟吧,哈哈
不过总算问题得到一个解决了,问题主要是这样的。
我在im发送消息的时候,可以通过相册选择图片,图片里面存在很大的图片就会内存溢出,也可以直接相机拍照呈现图片,这里就存在一个问题,我需要通过TextView进行呈现,网上各种版本,未找到一个比较全面的,在此,本人吸取前人的成果进行一次比较多的总结。

首先
调用相机的方法:
File file //生成一个空文件,用于保存相机的图片
Uri uri = Uri.fromFile(file);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent, CAMERA_CODE);

从相册选择的方法:
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, IMAGE_CODE);


下面应该就是对结果进行处理
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

switch (requestCode) {
case IMAGE_CODE:
// 选择图片
Uri selectedImageUri = data.getData();
addPicturesAttachment(selectedImageUri);
break;
case CAMERA_CODE:
if(resultCode == -1){
// 返回拍照后的图片
addPhotoAttachment();
}
break;
}

}

/**
* 获取信息
* @author ljl
* @createtime Dec 5, 2012 6:04:35 PM
* @param userName
* @param file
* @return
*/




//此方法,我觉得不是很好,就是通过文字进行图片替换,这种是我看到表情方法借鉴的,//不知道哪位高手,知道其他方法,望指教
public CharSequence getImage(BitMap bitmap){

SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder("[photo]");
spannableStringBuilder.setSpan(new ImageSpan(bitmap), 0, spannableStringBuilder.length(), SpannableStringBuilder.SPAN_EXCLUSIVE_EXCLUSIVE) ;
return spannableStringBuilder;
}
/**
* 解决图片过大引起内存溢出问题,有了这个过后,还存在一个问题,如果我的分辨 *率 问题,每个手机分辨率不一致,显示出来的效果不一样,如果显示过大就会出现两
*张 图片,解决方法,再对该方法调用一次缩略图方法resizeImage,再次还存在一个问题,我返回出来的是BItmap,我要怎么显示在TextView上了,这里就需要进行处理
* @author ljl
* @createtime Dec 6, 2012 9:03:30 AM
* @param path
* @param fitinWidth
* @param fitinHeight
* @return Bitmap
*/
public static Bitmap createFitinBitmap(String path, int fitinWidth, int fitinHeight)
{
Options opts = new Options();
opts.inJustDecodeBounds = true;
BitmapFactory.decodeFile(path, opts);
int sampleWidth = opts.outWidth / fitinWidth;
int sampleHeight = opts.outHeight / fitinHeight;
opts.inSampleSize = sampleWidth>sampleHeight? sampleWidth : sampleHeight;
opts.inJustDecodeBounds = false;
opts.inDither = false;
opts.inPreferredConfig = Bitmap.Config.RGB_565;
return BitmapFactory.decodeFile(path, opts);
}


/**
* 图片缩放
* @param originalBitmap 原始的Bitmap
* @param newWidth 自定义宽度
* @param newHeight自定义高度
* @return 缩放后的Bitmap
*/
public static Bitmap resizeImage(Bitmap originalBitmap, int newWidth, int newHeight) {
int width = originalBitmap.getWidth();
int height = originalBitmap.getHeight();
// 定义欲转换成的宽、高
// int newWidth = 200;
// int newHeight = 200;
// 计算宽、高缩放率
float scanleWidth = (float) newWidth / width;
float scanleHeight = (float) newHeight / height;
// 创建操作图片用的matrix对象 Matrix
Matrix matrix = new Matrix();
// 缩放图片动作
matrix.postScale(scanleWidth, scanleHeight);
// 旋转图片 动作
// matrix.postRotate(45);
// 创建新的图片Bitmap
Bitmap resizedBitmap = Bitmap.createBitmap(originalBitmap, 0, 0, width, height, matrix, true);

return resizedBitmap;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值