最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于Android bitmap你不知道的一些事

 更新時(shí)間:2016年11月10日 09:11:28   作者:_solary  
這篇文章主要為大家詳細(xì)介紹了關(guān)于Android bitmap你不知道的一些事,使用bitmap需要注意的一些細(xì)節(jié),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文為大家分享了Android bitmap使用細(xì)節(jié),供大家參考,具體內(nèi)容如下

1、計(jì)算機(jī)表示圖形的幾種方式

1)BMP :幾乎不進(jìn)行壓縮 占用空間比較大
2)JPG : 在BMP的基礎(chǔ)上對(duì)相鄰的像素進(jìn)行壓縮,占用空間比BMP小
3)PNG : 在JPG的基礎(chǔ)上進(jìn)一步壓縮 占用空間比較小

這是對(duì)三種格式進(jìn)行一個(gè)簡(jiǎn)單的介紹,知道是怎么回事就行,在Android中一般都用png格式的圖片,因?yàn)樗加每臻g小

2、圖形的大小

圖形的大小 = 圖片的總像素*每個(gè)像素的大小
圖片總像素 = 圖片的長(zhǎng)*圖片的高

可以看到 保存一張圖片時(shí)有一些選項(xiàng)看一下其中幾個(gè)
單色位圖: 每個(gè)像素最多可以表示2種顏色,只需要使用長(zhǎng)度為1的二進(jìn)制位來(lái)表示,因此每個(gè)像素占1/8byte
16色位圖: 每個(gè)像素最多可以表示16種顏色,所以只需要長(zhǎng)度為4的二進(jìn)制表示,因此每個(gè)像素占1/2byte
256色位圖: 每個(gè)像素最多可以表示256中顏色,所以只需要長(zhǎng)度是8的二級(jí)制位表示就可以了,因此每個(gè)像素占1byte
24位位圖:即RGB三原色位圖 每個(gè)像素占3個(gè)byte。

3、android 加載大圖失敗的原因

知道了上面的知識(shí)后,來(lái)研究一下android 當(dāng)中的位圖信息,
在android 中采用ARGB來(lái)表示顏色,所以每個(gè)像素會(huì)占4byte。
當(dāng)用BitmapFactory加載原圖時(shí)當(dāng)圖片的寬和高遠(yuǎn)大于手機(jī)的寬和高時(shí)會(huì)出現(xiàn)

E/AndroidRuntime(2128): Caused by: java.lang.OutOfMemoryError
E/dalvikvm-heap(2128): Out of memory on a 30720012-byte allocation.

也就是內(nèi)存越界異常,但是看圖片的大小并沒(méi)有超過(guò)系統(tǒng)所分給每個(gè)應(yīng)用的內(nèi)存大小。
所以可以確定 加載原圖時(shí)圖片的計(jì)算方式是按上面的公式計(jì)算的。

4、加載大圖的方法

知道了加載大圖失敗的原因后,解決OutOfMemoryError的方法也就很明顯了,對(duì)的 就是縮放。
下面就看看下縮放的步驟
1) 獲取手機(jī)的寬和高
2)獲取圖片的寬和高
3)計(jì)算縮放比
4)按照縮放比顯示圖片

    //1) 獲取手機(jī)的寬和高
    WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
    int screenWidth = wm.getDefaultDisplay().getWidth();
    int screenHeight = wm.getDefaultDisplay().getHeight();
    //2)獲取圖片的寬和高
    BitmapFactory.Options options = new Options();
    //返回一個(gè)null 沒(méi)有bitmap,不去真正解析位圖,但是能返回圖片的一些信息。
    options.inJustDecodeBounds = true; 
    BitmapFactory.decodeResource(getResources(), R.drawable.dog,options);
    int imagWidth = options.outWidth;
    int imagHeight = options.outHeight;
    //3)計(jì)算縮放比
    int scale =1;
    int scalex = imagWidth / screenWidth;
    int scaley = imagHeight / screenHeight;
    scale = Math.max(scalex, scaley);
    //4)按照縮放比顯示圖片
    options.inSampleSize = scale;
    //開(kāi)始真正的解析位圖 
    options.inJustDecodeBounds = false;
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.dog,options);

5、Bitmap修改圖片

在看一種情況,當(dāng)用BitmapFactory.decodeXXX decode一張圖片后,需要修改圖片
如:

 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
    bitmap.setPixel(100, 20, Color.RED);

發(fā)現(xiàn)push到手機(jī)后報(bào)錯(cuò)了,這是因?yàn)樵瓐D是不能被修改的。
那么當(dāng)需要修改圖片是怎么辦呢?
對(duì)了 可以操作原圖的副本,副本是可以修改的
創(chuàng)建原圖的副本步驟如下:

1)創(chuàng)建模板
2)創(chuàng)建一個(gè)畫布以原圖作為模板
3)創(chuàng)建一個(gè)畫筆
4)開(kāi)始拷貝原圖

Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
        R.drawable.ic_launcher);
    // bitmap.setPixel(100, 20, Color.RED);
    // 1)創(chuàng)建模板
    Bitmap copybitmap = Bitmap.createBitmap(bitmap.getWidth(),
        bitmap.getHeight(), bitmap.getConfig());
    // 2)創(chuàng)建一個(gè)畫布以原圖作為模板
    Canvas canvas = new Canvas(copybitmap);
    // 3)創(chuàng)建一個(gè)畫筆
    Paint paint = new Paint();
    // 4)開(kāi)始拷貝原圖
    canvas.drawBitmap(bitmap, new Matrix(), paint);

    // 修改圖片
    copybitmap.setPixel(20, 30, Color.RED);

至此是我工作中發(fā)現(xiàn)的一些小的細(xì)節(jié),別的一些操作位圖的方法應(yīng)該都是大家所熟知的了,就不再班門弄斧了。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android 中Volley二次封裝并實(shí)現(xiàn)網(wǎng)絡(luò)請(qǐng)求緩存

    Android 中Volley二次封裝并實(shí)現(xiàn)網(wǎng)絡(luò)請(qǐng)求緩存

    這篇文章主要介紹了Android 中Volley二次封裝并實(shí)現(xiàn)網(wǎng)絡(luò)請(qǐng)求緩存的相關(guān)資料,希望通過(guò)本文能幫助到大家,徹底會(huì)使用Volley,需要的朋友可以參考下
    2017-09-09
  • Android四大組件:Activity/Service/Broadcast/ContentProvider作用示例

    Android四大組件:Activity/Service/Broadcast/ContentProvider作用示例

    Android是一種基于Linux,自由及開(kāi)放源代碼的操作系統(tǒng),Android分為四個(gè)層,從高層到底層分別是應(yīng)用程序?qū)?、?yīng)用程序框架層、系統(tǒng)運(yùn)行庫(kù)層和Linux內(nèi)核層,Android有四大基本組件:Activity、Service服務(wù)、BroadcastReceiver廣播接收器、Content Provider內(nèi)容提供者
    2023-11-11
  • Android HttpClient GET或者POST請(qǐng)求基本使用方法

    Android HttpClient GET或者POST請(qǐng)求基本使用方法

    在Android開(kāi)發(fā)中我們經(jīng)常會(huì)用到網(wǎng)絡(luò)連接功能與服務(wù)器進(jìn)行數(shù)據(jù)的交互,為此Android的SDK提供了Apache的HttpClient來(lái)方便我們使用各種Http服務(wù).這里只介紹如何使用HttpClient發(fā)起GET或者POST請(qǐng)求
    2012-12-12
  • Android實(shí)現(xiàn)幾種推送方式解決方案

    Android實(shí)現(xiàn)幾種推送方式解決方案

    推送功能在手機(jī)開(kāi)發(fā)中應(yīng)用的場(chǎng)景是越來(lái)起來(lái)了,本篇文章主要介紹了Android實(shí)現(xiàn)幾種推送方式解決方案 ,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2016-12-12
  • 基于Flutter實(shí)現(xiàn)多邊形和多角星組件

    基于Flutter實(shí)現(xiàn)多邊形和多角星組件

    開(kāi)發(fā)中,免不了會(huì)用到多邊形、多角星等圖案,比較常用的多邊形比如雷達(dá)圖、多角星比如評(píng)價(jià)星級(jí)的五角星等,本文章就使用Flutter繪制封裝一個(gè)這樣的組件,需要的可以參考一下
    2022-05-05
  • 適配android7.0獲取文件的Uri的方法

    適配android7.0獲取文件的Uri的方法

    本篇文章主要介紹了適配android7.0獲取文件的Uri的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • android中圖片的三級(jí)緩存cache策略(內(nèi)存/文件/網(wǎng)絡(luò))

    android中圖片的三級(jí)緩存cache策略(內(nèi)存/文件/網(wǎng)絡(luò))

    實(shí)現(xiàn)圖片緩存也不難,需要有相應(yīng)的cache策略。這里我采用 內(nèi)存-文件-網(wǎng)絡(luò) 三層cache機(jī)制,其中內(nèi)存緩存包括強(qiáng)引用緩存和軟引用緩存(SoftReference),其實(shí)網(wǎng)絡(luò)不算cache,這里姑且也把它劃到緩存的層次結(jié)構(gòu)中
    2013-06-06
  • Android實(shí)現(xiàn)類似微信的文本輸入框 效果

    Android實(shí)現(xiàn)類似微信的文本輸入框 效果

    本文給大家介紹一下微信的文本輸入框是如何實(shí)現(xiàn)的,其實(shí)那只是個(gè)普通的文本框設(shè)了一個(gè)特殊的背景而已。具體微信怎么實(shí)現(xiàn)的,大家可以反編譯下,這里介紹下如何實(shí)現(xiàn)這個(gè)背景
    2017-05-05
  • Android編程實(shí)現(xiàn)播放視頻時(shí)切換全屏并隱藏狀態(tài)欄的方法

    Android編程實(shí)現(xiàn)播放視頻時(shí)切換全屏并隱藏狀態(tài)欄的方法

    這篇文章主要介紹了Android編程實(shí)現(xiàn)播放視頻時(shí)切換全屏并隱藏狀態(tài)欄的方法,結(jié)合實(shí)例形式分析了Android視頻播放事件響應(yīng)及相關(guān)屬性設(shè)置操作技巧,需要的朋友可以參考下
    2017-08-08
  • Android優(yōu)化之電量?jī)?yōu)化的實(shí)現(xiàn)

    Android優(yōu)化之電量?jī)?yōu)化的實(shí)現(xiàn)

    這篇文章主要介紹了Android優(yōu)化之電量?jī)?yōu)化的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07

最新評(píng)論

昔阳县| 安庆市| 彭山县| 镇安县| 澄迈县| 会同县| 蒲江县| 贵定县| 屏东县| 北辰区| 平昌县| 濉溪县| 曲靖市| 靖江市| 中超| 百色市| 松江区| 临夏市| 渝北区| 五莲县| 吴忠市| 海盐县| 夹江县| 本溪市| 金乡县| 商南县| 榆社县| 浦东新区| 丽江市| 新乐市| 蓬莱市| 本溪| 镇安县| 长海县| 德惠市| 松溪县| 龙南县| 靖边县| 兴业县| 漳州市| 光泽县|