Android处理Bitmap使其能够不失真等比缩放裁剪后显示在ImageView上
2015-04-24 03:48
531 查看
Android开发过程中,我们有时需要动态得显示一些图片,并且这些图片的大小差距会十分大,如果需求并不是需要图片完整显示,但是需要不失真,并且要图片中间部分的情况下,我们需要做一系列处理,因为这个时候ImageView的各种scale type都不适用。具体步骤详见下面代码,大家也可以直接拷过去作为工具类使用
/** * 获取正确缩放裁剪适应IamgeView的Bitmap * @param imageView * @param bitmap * @return */ public static Bitmap createFitBitmap(ImageView imageView, Bitmap bitmap) { Log.i(TAG, "createFitBitmap<---------------------"); int widthTarget = imageView.getWidth(); int heightTarget = imageView.getHeight(); int widthBitmap = bitmap.getWidth(); int heightBitmap = bitmap.getHeight(); Log.i(TAG, "widthTarget = " + widthTarget ); Log.i(TAG, "heightTarget = " + heightTarget ); Log.i(TAG, "widthBitmap = " + widthBitmap ); Log.i(TAG, "heightBitmap = " + heightBitmap ); Bitmap result = null; if( widthBitmap >= widthTarget && heightBitmap >= heightTarget ){ result = createLargeToSmallBitmap(widthBitmap, heightBitmap, widthTarget, heightTarget, bitmap); } else if( widthBitmap >= widthTarget && heightBitmap < heightTarget ){ Bitmap temp = createLargeWidthToEqualHeightBitmap(widthBitmap, heightBitmap, widthTarget, heightTarget, bitmap); result = createLargeToSmallBitmap(temp.getWidth(), temp.getHeight(), widthTarget, heightTarget, temp); } else if( widthBitmap < widthTarget && heightBitmap >= heightTarget ){ Bitmap temp = createLargeHeightToEqualWidthBitmap(widthBitmap, heightBitmap, widthTarget, heightTarget, bitmap); result = createLargeToSmallBitmap(temp.getWidth(), temp.getHeight(), widthTarget, heightTarget, temp); } else{ Bitmap temp = createSmallToEqualBitmap(widthBitmap, heightBitmap, widthTarget, heightTarget, bitmap); result = createFitBitmap(imageView, temp); } Log.i(TAG, "createFitBitmap--------------------->"); return result; } private static Bitmap createLargeToSmallBitmap( int widthBitmap, int heightBitmap, int widthTarget, int heightTarget, Bitmap bitmap){ Log.i(TAG, "createLargeToSmallBitmap<---------------------"); Log.i(TAG, "widthTarget = " + widthTarget ); Log.i(TAG, "heightTarget = " + heightTarget ); Log.i(TAG, "widthBitmap = " + widthBitmap ); Log.i(TAG, "heightBitmap = " + heightBitmap ); int x = (widthBitmap - widthTarget) / 2; int y = (heightBitmap - heightTarget) / 2; Log.i(TAG, "createLargeToSmallBitmap--------------------->"); return Bitmap.createBitmap(bitmap, x, y, widthTarget, heightTarget); } private static Bitmap createLargeWidthToEqualHeightBitmap(int widthBitmap, int heightBitmap, int widthTarget, int heightTarget, Bitmap bitmap){ Log.i(TAG, "createLargeWidthToEqualHeightBitmap<---------------------"); Log.i(TAG, "widthTarget = " + widthTarget ); Log.i(TAG, "heightTarget = " + heightTarget ); Log.i(TAG, "widthBitmap = " + widthBitmap ); Log.i(TAG, "heightBitmap = " + heightBitmap ); double scale = ( heightTarget * 1.0 ) / heightBitmap; Log.i(TAG, "createLargeWidthToEqualHeightBitmap--------------------->"); return Bitmap.createScaledBitmap(bitmap, (int)(widthBitmap * scale) , heightTarget, false); } private static Bitmap createLargeHeightToEqualWidthBitmap(int widthBitmap, int heightBitmap, int widthTarget, int heightTarget, Bitmap bitmap){ Log.i(TAG, "createLargeHeightToEqualWidthBitmap<---------------------"); Log.i(TAG, "widthTarget = " + widthTarget ); Log.i(TAG, "heightTarget = " + heightTarget ); Log.i(TAG, "widthBitmap = " + widthBitmap ); Log.i(TAG, "heightBitmap = " + heightBitmap ); double scale = ( widthTarget * 1.0 ) / widthBitmap; Log.i(TAG, "createLargeHeightToEqualWidthBitmap--------------------->"); return Bitmap.createScaledBitmap(bitmap, widthTarget , (int)(heightTarget * scale), false); } private static Bitmap createSmallToEqualBitmap(int widthBitmap, int heightBitmap, int widthTarget, int heightTarget, Bitmap bitmap){ Log.i(TAG, "createSmallToEqualBitmap<---------------------"); Log.i(TAG, "widthTarget = " + widthTarget ); Log.i(TAG, "heightTarget = " + heightTarget ); Log.i(TAG, "widthBitmap = " + widthBitmap ); Log.i(TAG, "heightBitmap = " + heightBitmap ); double scaleWidth = ( widthTarget * 1.0 ) / widthBitmap; double scaleHeight = ( heightTarget * 1.0 ) / heightBitmap; double scale = Math.min(scaleWidth, scaleHeight); Log.i(TAG, "createSmallToEqualBitmap--------------------->"); return Bitmap.createScaledBitmap(bitmap, (int)(widthBitmap * scale), (int)(heightBitmap * scale), false); }
相关文章推荐
- Android:FullImageView 自定义等比缩放的铺满控件显示的ImageView
- Android Bitmap太大导致ImageView不显示的问题
- 【Android自定义View实战】之仿去哪儿网App图片按压显示指纹并缩放效果TouchFingerImageView
- 【Android】显示高清大图,可缩放类库 - SubsamplingScaleImageView(可用于做图片浏览器)使用说明
- Android ImageView 图片等比缩放问题
- Android ImageView实现图片裁剪和显示功能
- android 怎么把网络图片生成一个Bitmap显示在ImageView中
- Android-相同BitmapDrawable在不同ImageView显示问题
- android ImageView 视屏幕情况 使图片在限定范围内进行缩放显示
- android 常用Bitmap处理方法收集:普通裁剪,缩放,圆形裁剪
- Android 使用NDK处理BItmap及直接控制SurfaceView的Surface的显示
- 举例说明android中Bitmap、ListView以及ImageView的综合使用---显示图片并获取图片的宽和高
- 调用系统摄像头拍照,对拍照后的图片进行裁剪和压缩处理,并显示在imageview上面
- Android ImageView 图片等比缩放问题
- android 将图片内容解析成字节数组,将字节数组转换为ImageView可调用的Bitmap对象,图片缩放,把字节数组保存为一个文件,把Bitmap转Byte
- android——获取ImageView上面显示的图片bitmap对象
- Android Bitmap太大导致ImageView不显示的问题
- Android BitmapFactory.Options 对图片进行缩放以符合ImageView大小
- android 将图片内容解析成字节数组,将字节数组转换为ImageView可调用的Bitmap对象,图片缩放,把字节数组保存为一个文件,把Bitmap转Byt
- android 将图片内容解析成字节数组,将字节数组转换为ImageView可调用的Bitmap对象,图片缩放,把字节数组保存为一个文件,把Bitmap转Byte