日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

探索图片填充模式二--CenterCrop模式的实现

發布時間:2023/12/9 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 探索图片填充模式二--CenterCrop模式的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CenterCrop模式解決的就是:

? ? 1. 圖片要去兩頭,留中間?

? ? 2. 圖片要填充滿控件

? 這個模式和fitCenter還有有很大的不同。借鑒上篇文章的思路,我們同樣按照Image與ImageView的寬高比差值,分兩種情況進行討論。

? 假設原始圖片高h,寬w , Imageview的高y,寬x ,比較兩者高寬比。裁剪出的圖稱為Image1:

? 1、 當 y / x - h / w > 0 時

? 說明Imageview的高寬比大于圖片的高寬比,如圖所示:

? 左圖實線標示的是圖片Image的高和寬,右圖是Imageview。 我們需要從Image的中間按照比例y/x裁剪出一幅圖Image1來,如圖中虛線所示。

? 顯而易見,Image1的寬度是w1,高度是h 。

? Image1的高寬比必須和Imageview的高寬比相同,即 y / x = h / w1 , 計算出 w1 = (h * x )/ y

? 在FitCenter模式中,我們需要計算Image在畫布上的繪制點。在CenterCrop模式中,都是裁剪操作,我們只需要計算在Image的什么地方進行裁剪。從圖上可以看出,裁剪點 ?P的坐標是((w - w1) / 2, 0)。

?2、當 y / x - h / w <= 0時

? 說明Imageview的高寬比小于圖片的高寬比,如圖所示:

? 顯而易見,Image1高度為h1, 寬度為w ,依據 y / x = h1 / w , 計算出 h1 = (w * y) / x

? 裁剪點P 的坐標是 (0, (h - h1) / 2)

? 好了,算法我們分析出來了。在Android中繪制圖片的某一個部分使用到了函數 Bitmap.createBitmap(Bitmap source, int x, int y, int width, int height)

? source是原始圖片,x指的是繪制的橫坐標,y指的是繪制的縱坐標。width,height分別代表寬高。

? ?下面給出核心代碼實現:

/*** 以CenterCrop方式resize圖片* @param src 原始圖片* @param destWidth 目標圖片寬度* @param destHeight 目標圖片高度* @return*/ public Bitmap resizeBitmapByCenterCrop(Bitmap src, int destWidth, int destHeight) {if (src == null || destWidth == 0 || destHeight == 0) {return null;}// 圖片寬度int w = src.getWidth();// 圖片高度int h = src.getHeight();// Imageview寬度int x = destWidth;// Imageview高度int y = destHeight;// 高寬比之差int temp = (y / x) - (h / w);/*** 判斷高寬比例,如果目標高寬比例大于原圖,則原圖高度不變,寬度為(w1 = (h * x) / y)拉伸* 畫布寬高(w1,h),在原圖的((w - w1) / 2, 0)位置進行切割*/if (temp > 0) {// 計算畫布寬度int w1 = (h * x) / y;// 創建一個指定高寬的圖片Bitmap newb = Bitmap.createBitmap(src, (w - w1) / 2, 0, w1, h);//原圖回收src.recycle();return newb;} else {/*** 如果目標高寬比小于原圖,則原圖寬度不變,高度為(h1 = (y * w) / x),* 畫布寬高(w, h1), 原圖切割點(0, (h - h1) / 2)*/// 計算畫布高度int h1 = (y * w) / x;// 創建一個指定高寬的圖片Bitmap newb = Bitmap.createBitmap(src, 0, (h - h1) / 2, w, h1);//原圖回收src.recycle();return newb;} }
??

? 效果圖:

? 附:Demo下載

?

? 原文鏈接:http://www.67tgb.com/?p=578

? 轉載注明:望月聽濤

總結

以上是生活随笔為你收集整理的探索图片填充模式二--CenterCrop模式的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。