我正在開發(fā)應(yīng)用程序,并在運(yùn)行Android 2.2的設(shè)備上對(duì)其進(jìn)行測(cè)試。在我的代碼中,我使用了通過BitmapFactory.decodeResource檢索的位圖,并且可以通過對(duì)其進(jìn)行調(diào)用來進(jìn)行更改bitmap.setPixels()。當(dāng)我在運(yùn)行Android 1.6的朋友的設(shè)備上進(jìn)行測(cè)試時(shí),我IllegalStateException接到的電話bitmap.setPixels。在線文檔說,IllegalStateException當(dāng)位圖是不可變的時(shí),從該方法拋出。該文檔沒有說明有關(guān)decodeResource返回不變位圖的任何內(nèi)容,但顯然必須如此。我是否可以進(jìn)行另一個(gè)調(diào)用以從應(yīng)用程序資源可靠地獲取可變位圖,而無需第二個(gè)Bitmap對(duì)象(我可以創(chuàng)建一個(gè)相同大小的可變位圖并繪制到包裝它的Canvas中,但是這需要兩個(gè)相同大小的位圖使用了兩倍于我的預(yù)期內(nèi)存)?
3 回答

嚕嚕噠
TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個(gè)贊
使用可變選項(xiàng)true將位圖復(fù)制到自身。這樣既不需要額外的內(nèi)存消耗,也不需要長(zhǎng)代碼行。
Bitmap bitmap= BitmapFactory.decodeResource(....);
bitmap= bitmap.copy(Bitmap.Config.ARGB_8888, true);

紫衣仙女
TA貢獻(xiàn)1839條經(jīng)驗(yàn) 獲得超15個(gè)贊
我們可以首先通過實(shí)例化BitmapFactory.Options類為BitmapFactory設(shè)置選項(xiàng),然后將名為“ inMutable”的選項(xiàng)字段設(shè)置為true,然后將此選項(xiàng)實(shí)例傳遞給解碼資源。
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inMutable = true;
Bitmap bp = BitmapFactory.decodeResource(getResources(), R.raw.white, opt);
添加回答
舉報(bào)
0/150
提交
取消