ImageView顯示不出來圖片


問題??

用ImageView控件方法:public void setImageBitmap(Bitmap bm)
來顯示生成的bimap,結果在圖片顯示區域顯示一片空白,而且其他控件顏色沒變化,造成Imageveiw顯示圖片不出來的假象。


問題原因是:

布局背景我設置為白色,而解碼生成的bitmap剛好在白色背景下顯示看不到一點圖片痕跡,在顯示圖片的區域看到的只是一片空白,至於為什么bitmap在白色先顯示不出來的原因暫還沒想通。若你也遇到類似問題建議跟換背景試試。

解決方法是:
將布局文件中ImageView所在的LinearLayout或其他Layout布局的背景顏色設置為黑色,這樣之前一直顯示圖片不出來的圖片終於露出原形。


小結:
這個問題算是個怪胎了,用H264解碼生成的Bitmap放上去顯示沒一點問題,而MPEG4解碼出來的Bitmap放上去就是顯示不出來,之前懷疑解碼生成的Bitmap有問題,經過反復驗證,確認解碼生成的Bitmap沒有問題,才猜測Imageview顯示有問題,費勁腦汁的跟換Imageview顯示圖片的方法。轉來轉去,搞了半天還是木有解決問題,后堡壘靈光一線,把布局背景顏色設置為黑色,結果圖片顯示出來了,太詭異了。搞了半天還是碰運氣解決滴。

其實在我確認解碼生成的Bitmap沒問題之后,我應該想到為什么圖片在默認的黑色背景下顯示沒一點問題,估計是被H264解碼生成Bitmap顯示沒問題跟忽悠了,跟我定位問題時帶了干擾。直接省去了那一環節。看來還是要程序化。
當問題找不到原因時,一定要每一個環節去對比驗證,即使是最不可能發生的環節,往往這就是問題原因所在。
遇到問題,不用怕,解決它,僅此而已。

在此小結記錄下byte[] 、Bitmap與Drawbale 三者直接的轉換
1、byte[] ->Bitmap
Bitmap Bitmap = BitmapFactory.decodeByteArray(data, offset, length);
2、Bitmap->byte[] 這種轉換我們應該將Bitmap看成是一張圖片,這樣我們想獲取它的數據,就知道要通過流,而且是byte類型流,於是很容易記住轉換方法 。
(1)ByteArrayOutputStream out = new ByteArrayOutputStream();//獲取流
(2)bitmap.compress(CompressFormat.JPEG, 100, out);//將圖片數據按照指定格式和質量壓縮到某個流中,
(3)byte[] buf = out.toByteArray();//將流轉換為byte[]
Bitmap 、Drawbale直接的轉換方法特別好記,只有利用他們之間搭建着橋梁,BitmapDrawable,剩下的就是利用向上轉型和向下轉型的思路就可以搞定。
3、Bitmap->Drawbale 向上轉型,因為Drawbale更靠近圖片文件。
Drawable drawable = new BitmapDrawable(bitmap);
4、Drawbale->Bitmap 向下轉型
Bitmap bitma = ((BitmapDrawable) bit).getBitmap();

至於byte[] 與Drawbale之間的轉換,那么Bitmap又相當於是橋梁。大家都懂得。

 

http://blog.csdn.net/sunnyfans/article/details/7914219


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM