Decoder

BaseImageDecoder.java
實(shí)現(xiàn)了ImageDecoder。調(diào)用ImageDownloader獲取圖片,然后根據(jù)ImageDecodingInfo或圖片 Exif 信息處理圖片轉(zhuǎn)換為 Bitmap
主要函數(shù):
(1). decode(ImageDecodingInfo decodingInfo)
調(diào)用ImageDownloader獲取圖片,再調(diào)用defineImageSizeAndRotation(…)函數(shù)得到圖片的相關(guān)信息,調(diào)用prepareDecodingOptions(…)得到圖片縮放的比例,調(diào)用BitmapFactory.decodeStream將 InputStream 轉(zhuǎn)換為 Bitmap,最后調(diào)用considerExactScaleAndOrientatiton(…)根據(jù)參數(shù)將圖片放大、翻轉(zhuǎn)、旋轉(zhuǎn)為合適的樣子返回

(2). defineImageSizeAndRotation(InputStream imageStream, ImageDecodingInfo decodingInfo)
得到圖片真實(shí)大小以及 Exif 信息(設(shè)置考慮 Exif 的條件下)

(3). defineExifOrientation(String imageUri)
得到圖片 Exif 信息中的翻轉(zhuǎn)以及旋轉(zhuǎn)角度信息

(4). prepareDecodingOptions(ImageSize imageSize, ImageDecodingInfo decodingInfo)
得到圖片縮放的比例。
4.1如果scaleType等于ImageScaleType.NONE,則縮放比例為 1;
4.2如果scaleType等于ImageScaleType.NONE_SAFE,則縮放比例為 (int)Math.ceil(Math.max((float)srcWidth / maxWidth, (float)srcHeight / maxHeight));
4.3否則,調(diào)用ImageSizeUtils.computeImageSampleSize(…)計(jì)算縮放比例。
在 computeImageSampleSize(…) 中
4.4如果viewScaleType等于ViewScaleType.FIT_INSIDE;
1.1 如果scaleType等于ImageScaleType.IN_SAMPLE_POWER_OF_2,則縮放比例從 1 開始不斷 *2 直到寬或高小于最大尺寸;
1.2 否則取寬和高分別與最大尺寸比例中較大值,即Math.max(srcWidth / targetWidth, srcHeight / targetHeight)。
4.5如果scaleType等于ViewScaleType.CROP;
2.1 如果scaleType等于ImageScaleType.IN_SAMPLE_POWER_OF_2,則縮放比例從 1 開始不斷 *2 直到寬和高都小于最大尺寸。
2.2 否則取寬和高分別與最大尺寸比例中較小值,即Math.min(srcWidth / targetWidth, srcHeight / targetHeight)。
4.6最后判斷寬和高是否超過最大值,如果是 *2 或是 +1 縮放

(5). considerExactScaleAndOrientatiton(Bitmap subsampledBitmap, ImageDecodingInfo decodingInfo, int rotation, boolean flipHorizontal)
根據(jù)參數(shù)將圖片放大、翻轉(zhuǎn)、旋轉(zhuǎn)為合適的樣子返回

ImageDecodingInfo.java
Image Decode 需要的信息。
String imageKey 圖片。
String imageUri 圖片 uri,可能是緩存文件的 uri。
String originalImageUri 圖片原 uri。
ImageSize targetSize 圖片的顯示尺寸。
imageScaleType 圖片的 ScaleType。
ImageDownloader downloader 圖片的下載器。
Object extraForDownloader 下載器需要的輔助信息。
boolean considerExifParams 是否需要考慮圖片 Exif 信息。
Options decodingOptions 圖片的解碼信息,為 BitmapFactory.Options

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容