图片处理(缩放、压缩)
来源:互联网 发布:linux 查找字符串 编辑:程序博客网 时间:2024/06/05 11:07
项目中用到自定义相机,由于摄像头都是width > height,并且拍照完了以后的图片总是需要旋转90度以后才是自己想要的结果,问题就出来了因为拍照以后生成的图片分辨率太高,旋转的时候总是OutOfMemoryError。在网上搜索解决办法的时候有建议:“尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存。因此,改用先通过BitmapFactory.decodeStream方法,创建出一个bitmap,再将其设为ImageView的 source,decodeStream最大的秘密在于其直接调用JNI>>nativeDecodeAsset()来完成decode,无需再使用java层的createBitmap,从而节省了java层的空间。另外,decodeStream直接拿的图片来读取字节码了, 不会根据机器的各种分辨率来自动适应, 使用了decodeStream之后,需要在hdpi和mdpi,ldpi中配置相应的图片资源, 否则在不同分辨率机器上都是同样大小(像素点数量),显示出来的大小就不对了。”对于不能直接使用hdpi或mdpi等的问题,是否可以获取资源文件的io流以后再调用decodeStream函数传入io。
还有对内存的分配,可以参考:http://blog.csdn.net/huangbiao86/article/details/8072128
顺便记录一下图片的一些处理:
按质量压缩图片:
ByteArrayOutputStream baos = new ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat.JPEG, 80, baos);//质量压缩方法,压缩到80% ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中 Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream数据生成图片
按比例压缩图片:
BitmapFactory.Options newOpts = new BitmapFactory.Options(); //开始读入图片,此时把options.inJustDecodeBounds 设回true了 newOpts.inJustDecodeBounds = true; Bitmap bitmap = BitmapFactory.decodeFile(srcPath,newOpts);//此时返回bm为空 newOpts.inJustDecodeBounds = false; int w = newOpts.outWidth; int h = newOpts.outHeight; //现在主流手机比较多是800*480分辨率,所以高和宽我们设置为 float hh = 800f;//这里设置高度为800f float ww = 480f;//这里设置宽度为480f //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可 int be = 1;//be=1表示不缩放 if (w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放 be = (int) (newOpts.outWidth / ww); } else if (w < h && h > hh) {//如果高度高的话根据宽度固定大小缩放 be = (int) (newOpts.outHeight / hh); } if (be <= 0) be = 1; newOpts.inSampleSize = be;//设置缩放比例(采样率),这里其实图片缩放了2be(宽高都缩放了) //重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了 bitmap = BitmapFactory.decodeFile(srcPath, newOpts);X、Y方向上按比例缩放:
Matrix matrix = new Matrix(); matrix.setScale(0.5f, 0.5f); // x方向和y方向上分别缩放0.5 Bitmap bm = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
- 图片处理(缩放、压缩)
- Android bitmap 图片缩放,压缩处理
- 压缩 缩放 图片
- ios--图片压缩/缩放
- java 图片压缩 缩放
- java 图片压缩、缩放
- 图片处理——压缩、缩放与旋转
- javascript压缩图片,缩放图片
- 图片的压缩和缩放
- java图片处理(水印 缩放 补白)
- android 图片处理(截取,缩放)
- android 图片处理(截取,缩放)
- android 图片处理(截取,缩放)
- 图片处理类(剪裁、缩放、水印)
- 图片处理类(剪裁、缩放、水印)
- android 图片处理(截取,缩放)
- java 图片缩放处理
- ios 处理图片缩放
- C# winform中实现Datagridview中只允许输入数字类型
- IntelliJ IDEA 使用 Resin + JRebel 实现热部署
- angualrjs动态加载分析
- hadoop学习从0开始-mapreduce
- SystemServer的诞生过程
- 图片处理(缩放、压缩)
- 硬中断机制(powerpc版)
- centos升级gcc到4.8
- javascript 中 slice()、substr() 和subString()使用
- static关键字的作用
- java 判断一个数是否为“开心数”
- 【bzoj2563】【阿狸和桃子的游戏】【贪心】
- Matlab与C/C++混合编程之Matlab调用OpenCV库函数
- iOS开发设置状态栏字体颜色