當前位置:首頁 » 安卓系統 » android圖片bitmap

android圖片bitmap

發布時間: 2022-05-13 16:01:06

Ⅰ android 已經知道路徑怎麼將路徑中的圖片變成Bitmap

/**
* 獲取本地圖片並指定高度和寬度
*/
public static Bitmap getNativeImage(String imagePath)
{
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
// 獲取這個圖片的寬和高
Bitmap myBitmap = BitmapFactory.decodeFile(imagePath, options); //此時返回myBitmap為空
//計算縮放比
int be = (int)(options.outHeight / (float)200);
int ys = options.outHeight % 200;//求余數
float fe = ys / (float)200;
if (fe >= 0.5)
be = be + 1;
if (be <= 0)
be = 1;
options.inSampleSize = be;
//重新讀入圖片,注意這次要把options.inJustDecodeBounds 設為 false
options.inJustDecodeBounds = false;
myBitmap = BitmapFactory.decodeFile(imagePath, options);
return myBitmap;
}
/**
* 以最省內存的方式讀取本地資源的圖片 或者SDCard中的圖片
* @param imagePath
* 圖片在SDCard中的路徑
* @return
*/
public static Bitmap getSDCardImg(String imagePath)
{
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inPreferredConfig = Bitmap.Config.RGB_565;
opt.inPurgeable = true;
opt.inInputShareable = true;
//獲取資源圖片
return BitmapFactory.decodeFile(imagePath, opt);
}

Ⅱ android中Bitmap存為一張圖片

可以用Bitmap.compress函數來把Bitmap對象保存成PNG或JPG文件,然後可以用BitmapFactory把文件中的數據讀進來再生成Bitmap對象。
保存的代碼大概類似於這樣:
try {
FileOutputStream out = new FileOutputStream(filename);
bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
} catch (Exception e) {
e.printStackTrace();
}
具體的可以去查Bitmap和BitmapFactory的幫助文檔。

Ⅲ android bitmap 從網路獲取圖片並處理問題 溢出

java中,JavaVM擁有自動管理內存的功能,Java的GC能夠進行垃圾回收,但是如果ImageView使用過多的Bitmap的話,經常會報OOM(內存溢出)。

造成內存溢出及解決方案:

  1. 使用BitmapFactory.decodeStream替代createBitmap方法

    原因是該方法直讀取圖片位元組,調用JNI>>nativeDecodeAsset()來完成decode,無需再使用java層的createBitmap。

  2. 使用壓縮讀取技術

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;

BitmapFactory.decodeFile(imageSdUri, options);

final int height = options.outHeight;

final int width = options.outWidth;

options.inSampleSize = 1;

int w = 320;

int h = 480;

h = w*height/width;//計算出寬高等比率

int a = options.outWidth/ w;

int b = options.outHeight / h;

options.inSampleSize = Math.max(a, b);

options.inJustDecodeBounds = false;

Bitmap bitmap = BitmapFactory.decodeFile(imageSdUri, options);


3.及時釋放Bitamp
Bitmap對象在不使用時,我們應該先調用recycle()釋放內存,然後才它設置為null.雖然recycle()從源碼上看,調用它應該能立即釋放Bitmap的主要內存,但是測試結果顯示它並沒能立即釋放內存。但是我它應該還是能大大的加速Bitmap的主要內存的釋放。

Ⅳ android bitmap 圖片縮放問題

在使用Bitmap進行點陣圖讀取和顯示的時候需要注意在生成點陣圖時,系統會根據不同的情況來縮小、放大圖像。
當把圖片放到drawable文件夾中時,160密度的模擬器顯示的圖像有放大效果,240密度的模擬器顯示原尺寸的圖像。
當把圖片放到drawable-hdpi文件夾中時,160密度的模擬器顯示出的圖像有縮小效果,240密度的模擬器顯示原尺寸的圖像。
當把圖片放到drawable-mdpi文件夾中時,160密度的模擬器顯示原尺寸的圖像,240密度的模擬器顯示放大的圖像。
當把圖片放到drawable-ldpi文件夾中時,160、240密度的模擬器都顯示放大的圖片。
由此可以看出,在使用Bitmap顯示圖像時,一般應放在drawable-hdpi文件夾中,這樣可以根據屏幕的密度來調整圖像大小,比如再做游戲時,大屏幕的與小屏幕的手機中,人物或物體應該有大小之分。望求採納謝謝...

Ⅳ Android開發中ImageView里的Bitmap很模糊,怎麼解決

目標和容器不一致導致的。
1、設置imageview的scaleType為center,即不隨著控制項的大小而去硬性適配;
2、確保所得bitmap即圖片有預期的大小;
3、設置imageview的寬高為wrap,去適應bitmap的大小。

Ⅵ android,如何讀取資源文件里的圖片到bitmap里

  1. 方式:以R文件的方式

  2. 路徑:假設 res/drawable下有 test.jpg文件

    Bitmap bitmap=BitmapFactory.decodeResource(this.getContext().getResources(), R.drawable.test)

Ⅶ android中怎麼獲取一個bitmap在屏幕中位置

是要編寫一個這樣的功能么,android提供的api裡面一般圖片都是bitmap,可以通過canvas.drawbitmap的方法在view進行圖片的繪制,在方法中需要進行傳入一個類型為matrix的參數,設置martrix的一些參數就可以進行圖片的放大的繪制,這只是顯示,也就是mvc中的view層,然後通過提供的一些觸摸函數的重寫並實現自己需要的一些功能,如拖動,實際上就是改變bitmap繪制的位置。關於觸摸的處理和圖片的繪制可以在網上進行一些教程的搜索,我就不羅列了,最終就是需要通過控制函數來改變圖片的繪制方式,這也許就是你所需要的功能。

Ⅷ android 讀取Bitmap的幾種方式

想讀取本地項目里的資源圖片,但又不能用到R文件。查了很多資料終於找到了。 現總結以下幾種讀取Bitmap的方法。 1.以文件流的方式,假設在sdcard下有 test.png圖片 FileInputStream fis = new FileInputStream("/sdcard/test.png"); Bitmap bitmap=BitmapFactory.decodeStream(fis); 2. 以R文件的方式,假設 res/drawable下有 test.jpg文件Bitmapbitmap =BitmapFactory.decodeResource(this.getContext().getResources(), R.drawable.test); 3.以ResourceStream的方式,但不用到R文件。 Bitmap.bitmap=BitmapFactory.decodeStream(getClass().getResourceAsStream(「/res/drawable/test.png」)); 圖片名就可以讀取到 Bitmap啦。 BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 2; //圖片寬高都為原來的二分之一,即圖片為原來的四分一 //以上代碼可以優化內存溢出,但它只是改變圖片大小,並不能徹底解決內存溢出。

Ⅸ android bitmap使用時注意什麼

一、 問題的背景和意義
在Android移動應用開發中,對Bitmap的不小心處理,很容易引起程序內存空間耗盡而導致的程序崩潰問題。比如我們常遇到的問題:
java.lang.OutofMemoryError: bitmap size exceeds VM budget.
導致該問題的出現,一般由以下幾方面原因導致:
引動設備一般存儲空間非常有限。當然不同設備分配給應用的內存空間是不同的。但相對不但提高的設備解析度而言,內存的分配仍然是相對緊張的。
Bitmap對象常常佔用大量的內存空間,比如:對於2592*1936的設備,如果採用ARGB_8888的格式載入圖像,內存佔用將達到19MB空間。
在Anroid App中經常用到ListView,ViewPager等控制項,這些控制項常會包含較大數量的圖片資源。
二、 問題及場景分析
1 高效地載入大圖片。
BitmapFactory類提供了一些載入圖片的方法:decodeByteArray(), decodeFile(), decodeResource(), 等等。
為了避免佔用較大內存,經常使用BitmapFactory.Options 類,設置inJustDecodeBounds屬性為true。
//
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds =true;
BitmapFactory.decodeResource(getResources(), R.id.myimage, options);
為了避免java.lang.OutOfMemory 的異常,我們在真正decode圖片之前檢查它的尺寸,除非你確定這個數據源提供了准確無誤的圖片且不會導致佔用過多的內存。
載入一個按比例縮小的版本到內存中。例如,如果把一個原圖是1024*768 pixel的圖片顯示到ImageView為128*96 pixel的縮略圖就沒有必要把整張圖片都載入到內存中。為了告訴解碼器去載入一個較小的圖片到內存,需要在你的BitmapFactory.Options 中設置 inSampleSize 為true 。例如, 一個解析度為2048x1536 的圖片,如果設置inSampleSize 為4,那麼會產出一個大概為512x384的圖片。載入這張小的圖片僅僅使用大概0.75MB,如果是載入全圖那麼大概要花費12MB(假設bitmap的配置是ARGB_8888).
2 不要在主線程處理圖片。

眾所周知的問題,不再贅述。
注意兩點:1. 為了保證使用的資源能被回收,建議使用WeakReference, 以應用內存內存緊張時,回收部分資源,保證程序進程不被殺死。
2. 避免非同步任務的長時間耗時操作,在任務執行結束後,及時釋放資源。
3 管理Bitmap內存。
在Android開發中,載入一個圖片到界面很容易,但如果一次載入大量圖片就復雜多了。在很多情況下(比如:ListView,GridView或ViewPager),能夠滾動的組件需要載入的圖片幾乎是無限多的。
有些組件的child view在不顯示時會回收,並循環使用,如果沒有任何對bitmap的持久引用的話,垃圾回收器會釋放你載入的bitmap。這沒什麼問題,但當這些圖片再次顯示的時候,要想避免重復處理這些圖片,從而達到載入流暢的效果,就要使用內存緩存和本地緩存了,這些緩存可以讓你快速載入處理過的圖片。
3.1 內存緩存
內存緩存以犧牲內存的代價,帶來快速的圖片訪問。LruCache類(API Level 4之前可以使用Support Library)非常適合圖片緩存任務,在一個LinkedHashMap中保存著對Bitmap的強引用,當緩存數量超過容器容量時,刪除最近最少使用的成員(LRU)。
注意:在過去,非常流行用SoftReference或WeakReference來實現圖片的內存緩存,但現在不再推薦使用這個方法了。因為從Android 2.3 (API Level 9)之後,垃圾回收器會更積極的回收soft/weak的引用,這將導致使用soft/weak引用的緩存幾乎沒有緩存效果。順帶一提,在Android3.0(API Level 11)以前,bitmap是儲存在native 內存中的,所以系統以不可預見的方式來釋放bitmap,這可能會導致短時間超過內存限制從而造成崩潰。

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:593
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:888
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:581
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:765
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:684
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1012
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:255
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:113
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:806
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:712