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

androidbitmap圖片

發布時間: 2024-04-11 21:39:00

A. Android Bitmap理解

參考:
Android Bitmap 詳解:關於 Bitamp 你所要知道的一切

Android Bitmap(點陣圖)詳解

圖片是由大量且有限個數的像素點組成。把一張圖片通過bitmap的方式創建到內存中,實際上就是在內存中創建了一個叫做Bitmap的對象,然後把 圖片所有像素 解碼後的數據存放在Bitmap對象裡面,Bitmap就擁有了圖片的寬高,透明度,顏色值等數據。所以Bitmap的創建是通過BitmapFactory.decodeXxx()。

Config是Bitmap類中的枚舉類。像素由ARGB四個顏色通道組成。Config描述點陣圖中像素的存儲方式。 這里的存儲方式,無非就是對顏色通道和用多大的容器(bit)來存儲的排列組合。所以config會影響圖片透明度,佔用內存大小,保存成文件的大小,圖片質量。
Config的字母表示該配置存儲的像素的顏色通道,數字表示對應通道的數據用多少位來存儲。

ALPHA_8:表示只存儲alpha通道,使用8bit(1位元組)的內存(容器)來存儲一個像素。
RGB_565:表示存儲RGB三個通道,分別使用5bit,6bit,5bit的內存(容器)來存儲一個像素。
ARGB_4444:表示存儲ARGB四個通道,每個通道都是以4bit的內存(容器)來存儲一個像素。
ARGB_8888:表示存儲ARGB四個通道,每個通道都是以8bit的內存(容器)來存儲一個像素。

所以,ARGB_8888配置佔用內存最大,圖片質量最高。
圖片壓縮的一個思路就是降低圖片的配置。

總內存 = 寬的像素數 × 高的像素數 × 每個像素點佔用的大小
註:
1 byte = 8 bit
1 KB = 1024 byte

B. Android 將bitmap 將圖片壓縮到指定的大小

方法調用案例

壓縮bitmap方法的封裝

C. android bitmap 圖片縮放問題

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

D. 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的主要內存的釋放。

E. android bitmap 改變圖片大小

Optionsoptions1=newOptions();
options1.inJustDecodeBounds=true;
BitmapFactory.decodeFile(filePath,options1);
options1.inSampleSize=RegisterTool.calculateInSampleSize(options1,110,160);//110,160:轉換後的寬和高,具體值會有些出入
options1.inJustDecodeBounds=false;
Bitmapbitmap=BitmapFactory.decodeFile(filePath,options1);//filePath:文件路徑
(BitmapFactory.Optionsoptions,
intreqWidth,intreqHeight){

finalintheight=options.outHeight;
finalintwidth=options.outWidth;
intinSampleSize=1;

if(height>reqHeight||width>reqWidth){

finalintheightRatio=Math.round((float)height
/(float)reqHeight);
finalintwidthRatio=Math.round((float)width/(float)reqWidth);

inSampleSize=heightRatio<widthRatio?widthRatio:heightRatio;
}

returninSampleSize;
}
//壓縮圖片並將Bitmap保存到本地
FileOutputStreamout=newFileOutputStream(newFile(filePath));
saveBitmap.compress(Bitmap.CompressFormat.JPEG,60,out);//60代表壓縮40%

F. Android 圖片載入(一)高效載入Bitmap 基礎篇

由於Bitmap的特殊性以及Android對單個應用所規定的最大內存限制,我們在同時載入大量Bitmap時很容易發生內存溢出,即我們通常所說的OutOfMemoryError(OOM),因此高效載入Bitmap就成為了每個Android開發者的必備技能。

在學習如何高效地載入Bitmap之前,首先介紹一下如何載入一個Bitmap。我們都知道,Bitmap在Android中通常指的是一張圖片,那麼如何將JPG、PNG等格式的圖片轉換成Bitmap對象呢?BitmapFactory類給我們提供了一些方法:

接下來開始介紹如何高效地載入Bitmap,其實核心思想很簡單: 就是採用BitmapFactory.Options參數來調整圖片尺寸來適配控制項的大小。

假如我們顯示圖片的控制項ImageView寬高為100×100像素,而圖片的尺寸為1024×1024像素,這個時候如果將整個圖片載入進來並顯示到控制項上,自然是很佔用內存資源的。這個時候可以通過BitmapFactory.Options按一定的采樣率載入縮小後的圖片,再將縮小後的圖片顯示到ImageView中,這樣就能減小內存佔用從而在一定程度上避免OOM的發生。

通過BitmapFactory.Options來縮放圖片,主要是使用它的inSampleSize參數,也就是前面提到的采樣率。當采樣率inSampleSize為1時,采樣後的圖片大小為原圖大小;當采樣率inSampleSize>1,比如為2時,采樣後的圖片寬高都為原圖的1/2,即像素降為原圖的1/4,佔用的內存大小也就是原圖的1/4;比較特殊的是,當采樣率inSampleSize<1時,系統會自動將該值當做1來處理。 因此可以得出一個結論:采樣率inSampleSize必須是大於1的整數圖片才會有縮小的效果,並且采樣率同時作用於寬高,也就是說采樣後的圖片會縮小到原圖的1/(inSampleSize^2)。比如inSampleSize=4,那麼縮放比例為1/16。

我們現在知道了,通過采樣率可以提高圖片的載入效率,那麼如何才能計算出最合適的采樣率?我們可以按照如下流程:

接下來以decodeFile方法為例實現圖片的縮放,其他三個方法處理方式類似。

下一篇: Android 圖片載入(二)圖片載入框架Glide 入門篇

《Android開發藝術探索》

G. 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的幫助文檔。

熱點內容
linuxshell腳本中if 發布:2024-05-07 13:25:01 瀏覽:221
phpmysql擴展 發布:2024-05-07 13:25:01 瀏覽:800
星密碼開網店怎麼樣 發布:2024-05-07 13:23:26 瀏覽:354
安卓手機java模擬器 發布:2024-05-07 12:43:07 瀏覽:913
c語言java哪個好學 發布:2024-05-07 12:35:16 瀏覽:335
奧特曼訪問 發布:2024-05-07 12:34:38 瀏覽:894
離線存儲本地存儲 發布:2024-05-07 12:30:23 瀏覽:413
win764sql2000安裝 發布:2024-05-07 12:18:07 瀏覽:78
beego上傳文件 發布:2024-05-07 11:59:20 瀏覽:211
安卓如何設置拒接來電 發布:2024-05-07 11:56:25 瀏覽:570