1. 程式人生 > >Glide載入圖片into(Target)導致OOM異常

Glide載入圖片into(Target)導致OOM異常

轉載請註明出處:http://blog.csdn.net/forevercbb/article/details/51027727
最近在專案中遇到Drawable轉換成Bitmap的需求,Glide載入的Drawable物件,而需要的是Bitmap物件。於是找到一個可以使用的方法,但是程式執行之後出現OOM異常,通過AndroidStudio自帶的記憶體檢測工具觀察得到在載入圖片的時候,memory的使用大約增長了幾十M。經過對該方法的檢查,drawable.getIntrinsicWidth()載入的是原圖片的長寬。而Glide載入圖片into(Target)時預設載入原圖大小。(整理的時候想想這樣好像沒什麼不對,被Glide的自動調整大小給慣的,算是自己疏忽了,總之做個記錄)
方法如下:

static Bitmap drawableToBitmap(Drawable drawable) // drawable 轉換成bitmap  {  
    int width = drawable.getIntrinsicWidth();// 取drawable的長寬  
    int height = drawable.getIntrinsicHeight();  
    Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ?              Bitmap.Config.ARGB_8888:Bitmap.Config
.RGB_565;// 取drawable的顏色格式 Bitmap bitmap = Bitmap.createBitmap(width, height, config);// 建立對應bitmap Canvas canvas = new Canvas(bitmap);// 建立對應bitmap的畫布 drawable.setBounds(0, 0, width, height); drawable.draw(canvas);// 把drawable內容畫到畫布中 return bitmap; }

手動對長寬進行調整,修改後方法如下(主要增加對圖片大小的限制):

public Bitmap drawableToBitmap(Drawable drawable) {
                                // 取 drawable 的長寬
                                int w = drawable.getIntrinsicWidth();
                                int h = drawable.getIntrinsicHeight();
                                int reqW = currentItem.getHeight();
                                int reqH = currentItem.getWidth();
                                float widthMultiple = w / reqW * 1.0f;
                                float heithMultiple = h / reqH * 1.0f;
                                float multiple = Math.max(widthMultiple, heithMultiple);
                                w = (int) (w / multiple);
                                h = (int) (h / multiple);

                                // 取 drawable 的顏色格式
                                Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
                                        : Bitmap.Config.RGB_565;
                                // 建立對應 bitmap
                                Bitmap bitmap = Bitmap.createBitmap(w, h, config);
                                // 建立對應 bitmap 的畫布
                                Canvas canvas = new Canvas(bitmap);
                                drawable.setBounds(0, 0, w, h);
                                // 把 drawable 內容畫到畫布中
                                drawable.draw(canvas);
                                return bitmap;
                            }

相關推薦

Glide載入圖片into(Target)導致OOM異常

轉載請註明出處:http://blog.csdn.net/forevercbb/article/details/51027727 最近在專案中遇到Drawable轉換成Bitmap的需求,Glide載

Android Glide 載入圖片

0.借鑑文章地址:http://blog.csdn.net/zivensonice/article/details/51835802 和 http://www.cnblogs.com/zhaoyanjun/p/5404162.html 1.導包:compile 'com.github.bumptech.gl

新版Glide載入圖片時,佔位符placeholder失效的解決方案

我使用的是當前最新的Glide4.8.0的版本,想要設定在載入圖片過程中顯示預設圖片的功能,網上查到的設定placeholder,但實際發現這個屬性爆紅無法使用。 解決方案: Glide .with(this) .load(PHOTO_URL) .apply(new Request

Glide載入圖片並儲存到本地返回file,bitmap

不廢話,直接上程式碼 [java] view plain copy print?import android.content.Context;  import android.content.Intent;  import android.graphics.Bitmap;  import androi

Glide載入圖片並儲存到本地相簿

不廢話,直接上程式碼 import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; impor

使用Glide載入圖片

載入網路圖片 1、匯入Glide庫和V4包,因為Glide依賴於V4 ImageView targetImageView = (ImageView) findViewById(R.id.im

Glide 載入圖片儲存至本地,載入回撥監聽

Glide 載入圖片儲存至本地指定路徑/** * Glide 載入圖片儲存到本地 * * imgUrl 圖片地址 * imgName 圖片名稱 */ Glide.with(context).load(im

RecycleView 中使用glide載入圖片如何防止載入錯亂

RecycleView和ListView類似,當滑動過程中利用子執行緒載入圖片,由於其內部viewHolder的複用機制,會導致載入圖片錯亂問題,ListView可以通過設定tag解決,但是如果用glide載入圖片,由於Glide內部已經使用了setTag的方式, 如果再使用ImageV

列表中Glide載入圖片大小顯示不正常問題

Glide載入圖片時大時小 前言:最近在專案中發現了一個奇怪的現象,在列表的item佈局中使用了glide來載入網路圖片,奇怪的現象出現了…同一張圖,同一份資料,有的時候顯示正常,有的時候該圖片顯示出來會稍微小一圈… 解決辦法:百思不得其解,找了很多資料,以為對recyclervie

GLide載入圖片還能這樣幹——基於Glide4.0完美封裝

一個基於GLide載入圖片的封裝開源框架。可以監聽載入圖片時的進度 ,可以設定圖片的圓角、邊框。可載入成圓形。 該庫是基於Glide V4.0設計的,實現如下特性: 1、通過提供的屬性可以設定圖片的圓角、邊框。 2、可以設定點選觸控圖片時的顏色、透

Glide載入圖片,GONE無法隱藏

Glide載入圖片的過程中使用了動畫,ImageView設定動畫之後無法隱藏,所以,使用Glide載入圖片dontAnimate()去掉動畫 Glide.with(DealerDynamicActivity.this).load(file)

Android框架之路——Glide載入圖片(結合RecyclerView、CardView)

Android框架之路——Glide載入圖片 一、簡介: 在泰國舉行的谷歌開發者論壇上,谷歌為我們介紹了一個名叫 Glide 的圖片載入庫,作者是bumptech。這個庫被廣泛的運用在google的開源專案中,包括2014年google I/O大會

Android Glide載入圖片時轉換為圓形、圓角、毛玻璃等圖片效果

Android Glide載入圖片時轉換為圓形、圓角、毛玻璃等圖片效果 附錄1簡單介紹了Android開源的圖片載入框架。在實際的開發中,雖然Glide解決了快速載入圖片的問題,但還有一個問題懸而未決:比如使用者的頭像,往往使用者的頭像是從伺服器端讀出的一個普通矩形圖片

Recyclerview 列表中 使用Glide載入圖片,下拉 或者上拉 載入資料,圖片閃 爍 ,

剛開始以為是 Recyclerview的快取複用問題,隨找了幾個方法試試,在Recyclerview adapter裡邊 設定tag,,然並卵; 禁止 glide 預設載入動畫,沒卵用,並沒有解決,

RecyclerView Glide載入圖片重新整理時會閃一下

@Override     protected void convert(BaseViewHolder helper, GameListResp.Data data) {           LinearLayout ic_linearLayout = (LinearLayo

android 使用Glide載入圖片閃動問題

1、RecyclerView 有自己預設的動畫,去除預設動畫 ((SimpleItemAnimator) recyclerView.getItemAnimator()).setSupportsChangeAnimations(false); 並且設定對應的adapter,

Glide載入圖片到Recyclerview中有時候只顯示佔位圖的問題

1、IllegalArgumentException: You cannot start a load for a destroyed activity @TargetApi(Build.VERSION_CODES.JELLY_BEAN_M

在GridView或者ListView的Adapter中使用Glide載入圖片圖片被拉伸問題

這個問題來自我的一篇部落格為什麼圖片載入我首先Glide 一位網友的評論,我測試了下,還真有,但是要根據圖片而定,有些圖片一點點的拉伸也看不出來,若原圖片有正圓或者正方形的圖案偶爾會顯示出橢圓或長方形有些明顯。 那這個問題的根源是什麼呢?為什麼顯示單張圖片沒有影響,放

解決Glide載入圖片問題!!!

Glide載入圖片變形? Glide在listview,RecyclerView中滑動時圖片錯位?大小不固定? Glide載入圓圖變成扁圖? Glide在列表裡下滑扁的,上滑正常?為蝦米? -

Android自定義圓角矩形ImageView,支援Glide載入圖片及顏色填充

前言:  之前用到圓角的情況大都是自定義一個shape背景drawable及用到v7包下的CardView包裹View實現圓角矩形效果,還有就是在使用者圓形頭像的時候需要使用到圓角矩形(圓形可以看做是特殊的圓角矩形),諸如Button,Editext,Text