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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Displaying Bitmaps Efficiently (一)-----Loading Large Bitmaps Efficiently(二)

發布時間:2024/4/15 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Displaying Bitmaps Efficiently (一)-----Loading Large Bitmaps Efficiently(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在多媒體應用中,位圖無處不在,但是如果加載到內存中的圖片尺寸大于屏幕上要顯示的圖片尺寸時,這些高分辨率的圖片便會引發許多性能問題。為了減輕應用的內存壓力,必須要調整加載到內存中的位圖大小。


需要想辦法讓圖片以實際要顯示的尺寸大小載入內存,而不是以完整的高分辨率進行加載。如果用戶想要查看完整分辨率的圖片,可以根據需要顯示圖片并加載到內存中。


?這里要用到Android中的縮放位圖(Scaling Bitmap)方法.

可以使用如下方法創建一個特定尺寸大小的Bitmap:



但是有一個缺點,此方法需要先要有一個位圖才能使用,也就是說,系統必須先加載圖片、解碼并創建位圖然后才能創建新的特定的尺寸更小的位圖。


1》可以在加載位圖時調整Bitmap的尺寸大小,這時就要用到BitmapOption對象的inSampleSize屬性了。


public int?inSampleSize

Added in?API level 1

If set to a value > 1, requests the decoder to subsample the original image, returning a smaller image to save memory. The sample size is the number of pixels in either dimension that correspond to a single pixel in the decoded bitmap. For example, inSampleSize == 4 returns an image that is 1/4 the width/height of the original, and 1/16 the number of pixels. Any value <= 1 is treated the same as 1. Note: the decoder uses a final value based on powers of 2, any other value will be rounded down to the nearest power of 2.(當inSampleSize的值不是2的多少次方時,就取比它小的、最接近的2的次方數)



2》但是如果你希望指定的圖片綻放尺寸不是2的次方時,你需要用到以下方法:




從上面bitmapfactory.cpp實現中可以看出,當設置inScaled 標記后,系統會用目標密度除以當前密度,計算出位圖要應用的縮放值。使用這種方法不僅可以調整圖片尺寸,還可以為其應用調整尺寸的濾鏡,也就是在調整尺寸的過程中加入一些額外的運算以使最后呈現的效果更加出色。但是額外應用濾鏡會增加處理時間 ,對于大型圖片而言,這會放緩圖片尺寸的調整速度。

3>解決方案:將以上兩種方法結合起來使用。


?(1)首先將inSampleSize應用到圖片,將圖片調整為目標尺寸的1/4(長、寬各1/4).

(2)然后使用inDensity 和inTargetDensity縮放圖片,以使圖片尺寸完全符合你想要的尺寸。

由于inSampleSize會減少像素數量,并在隨后的密度處理過程中為圖片應用調整尺寸的濾鏡,因此結合這兩種方法可以提高處理速度。

4> 如何獲取圖片的原始尺寸?



總結

以上是生活随笔為你收集整理的Displaying Bitmaps Efficiently (一)-----Loading Large Bitmaps Efficiently(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

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