androidbitmap失真
1. android bitmap 浣跨敤镞跺欐敞镒忎粈涔
涓銆 闂棰樼殑鑳屾櫙鍜屾剰涔
鍦ˋndroid绉诲姩搴旂敤寮鍙戜腑锛屽笲itmap镄勪笉灏忓绩澶勭悊锛屽緢瀹规槗寮曡捣绋嫔簭鍐呭瓨绌洪棿钥楀敖钥屽艰嚧镄勭▼搴忓穿婧冮梾棰樸傛瘆濡傛垜浠甯搁亣鍒扮殑闂棰桡细
java.lang.OutofMemoryError: bitmap size exceeds VM budget.
瀵艰嚧璇ラ梾棰樼殑鍑虹幇锛屼竴鑸鐢变互涓嫔嚑鏂归溃铡熷洜瀵艰嚧锛
寮曞姩璁惧囦竴鑸瀛桦偍绌洪棿闱炲父链夐檺銆傚綋铹朵笉钖岃惧囧垎閰岖粰搴旂敤镄勫唴瀛樼┖闂存槸涓嶅悓镄勚备絾鐩稿逛笉浣嗘彁楂樼殑璁惧囧垎杈ㄧ巼钥岃█锛屽唴瀛樼殑鍒嗛厤浠岖劧鏄鐩稿圭揣寮犵殑銆
Bitmap瀵硅薄甯稿父鍗犵敤澶ч噺镄勫唴瀛樼┖闂达纴姣斿傦细瀵逛簬2592*1936镄勮惧囷纴濡傛灉閲囩敤ARGB_8888镄勬牸寮忓姞杞藉浘镀忥纴鍐呭瓨鍗犵敤灏呜揪鍒19MB绌洪棿銆
鍦ˋnroid App涓缁忓父鐢ㄥ埌ListView锛孷iewPager绛夋带浠讹纴杩欎簺鎺т欢甯镐细鍖呭惈杈冨ぇ鏁伴噺镄勫浘鐗囱祫婧愩
浜屻 闂棰桦强鍦烘櫙鍒嗘瀽
1 楂樻晥鍦板姞杞藉ぇ锲剧墖銆
BitmapFactory绫绘彁渚涗简涓浜涘姞杞藉浘鐗囩殑鏂规硶锛歞ecodeByteArray(), decodeFile(), decodeResource(), 绛夌瓑銆
涓轰简阆垮厤鍗犵敤杈冨ぇ鍐呭瓨锛岀粡甯镐娇鐢˙itmapFactory.Options 绫伙纴璁剧疆inJustDecodeBounds灞炴т负true銆
//
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds =true;
BitmapFactory.decodeResource(getResources(), R.id.myimage, options);
涓轰简阆垮厤java.lang.OutOfMemory 镄勫纾甯革纴鎴戜滑鍦ㄧ湡姝decode锲剧墖涔嫔墠妫镆ュ畠镄勫昂瀵革纴闄ら潪浣犵‘瀹氲繖涓鏁版嵁婧愭彁渚涗简鍑嗙‘镞犺镄勫浘鐗囦笖涓崭细瀵艰嚧鍗犵敤杩囧氱殑鍐呭瓨銆
锷犺浇涓涓鎸夋瘆渚嬬缉灏忕殑鐗堟湰鍒板唴瀛树腑銆备緥濡傦纴濡傛灉鎶娄竴涓铡熷浘鏄1024*768 pixel镄勫浘鐗囨樉绀哄埌ImageView涓128*96 pixel镄勭缉鐣ュ浘灏辨病链夊繀瑕佹妸鏁村紶锲剧墖閮藉姞杞藉埌鍐呭瓨涓銆备负浜嗗憡璇夎В镰佸櫒铡诲姞杞戒竴涓杈冨皬镄勫浘鐗囧埌鍐呭瓨锛岄渶瑕佸湪浣犵殑BitmapFactory.Options 涓璁剧疆 inSampleSize 涓篓rue 銆备緥濡, 涓涓鍒呜鲸鐜囦负2048x1536 镄勫浘鐗囷纴濡傛灉璁剧疆inSampleSize 涓4锛岄偅涔堜细浜у嚭涓涓澶ф备负512x384镄勫浘鐗囥傚姞杞借繖寮犲皬镄勫浘鐗囦粎浠呬娇鐢ㄥぇ姒0.75MB锛屽傛灉鏄锷犺浇鍏ㄥ浘闾d箞澶ф傝佽姳璐12MB(锅囱绰itmap镄勯厤缃鏄疉RGB_8888).
2 涓嶈佸湪涓荤嚎绋嫔勭悊锲剧墖銆
浼楁墍锻ㄧ煡镄勯梾棰桡纴涓嶅啀璧樿堪銆
娉ㄦ剰涓ょ偣锛1. 涓轰简淇濊瘉浣跨敤镄勮祫婧愯兘琚锲炴敹锛屽缓璁浣跨敤WeakReference, 浠ュ簲鐢ㄥ唴瀛桦唴瀛樼揣寮犳椂锛屽洖鏀堕儴鍒呜祫婧愶纴淇濊瘉绋嫔簭杩涚▼涓嶈𨱒姝汇
2. 阆垮厤寮傛ヤ换锷$殑闀挎椂闂磋楁椂镎崭綔锛屽湪浠诲姟镓ц岀粨𨱒熷悗锛屽强镞堕喷鏀捐祫婧愩
3 绠$悊Bitmap鍐呭瓨銆
鍦ˋndroid寮鍙戜腑锛屽姞杞戒竴涓锲剧墖鍒扮晫闱㈠緢瀹规槗锛屼絾濡傛灉涓娆″姞杞藉ぇ閲忓浘鐗囧氨澶嶆潅澶氢简銆傚湪寰埚氭儏鍐典笅锛堟瘆濡傦细ListView,GridView鎴胧iewPager锛夛纴鑳藉熸粴锷ㄧ殑缁勪欢闇瑕佸姞杞界殑锲剧墖鍑犱箮鏄镞犻檺澶氱殑銆
链変簺缁勪欢镄刢hild view鍦ㄤ笉鏄剧ず镞朵细锲炴敹锛屽苟寰鐜浣跨敤锛屽傛灉娌℃湁浠讳綍瀵筨itmap镄勬寔涔呭紩鐢ㄧ殑璇濓纴鍨冨溇锲炴敹鍣ㄤ细閲婃斁浣犲姞杞界殑bitmap銆傝繖娌′粈涔堥梾棰桡纴浣嗗綋杩欎簺锲剧墖鍐嶆℃樉绀虹殑镞跺欙纴瑕佹兂阆垮厤閲嶅嶅勭悊杩欎簺锲剧墖锛屼粠钥岃揪鍒板姞杞芥祦鐣呯殑鏁堟灉锛屽氨瑕佷娇鐢ㄥ唴瀛樼紦瀛桦拰链鍦扮紦瀛树简锛岃繖浜涚紦瀛桦彲浠ヨ╀綘蹇阃熷姞杞藉勭悊杩囩殑锲剧墖銆
3.1 鍐呭瓨缂揿瓨
鍐呭瓨缂揿瓨浠ョ压鐗插唴瀛樼殑浠d环锛屽甫𨱒ュ揩阃熺殑锲剧墖璁块梾銆侺ruCache绫伙纸API Level 4涔嫔墠鍙浠ヤ娇鐢⊿upport Library锛夐潪甯搁傚悎锲剧墖缂揿瓨浠诲姟锛屽湪涓涓狶inkedHashMap涓淇濆瓨镌瀵笲itmap镄勫己寮旷敤锛屽綋缂揿瓨鏁伴噺瓒呰繃瀹瑰櫒瀹归噺镞讹纴鍒犻櫎链杩戞渶灏戜娇鐢ㄧ殑鎴愬憳锛圠RU锛夈
娉ㄦ剰锛氩湪杩囧幓锛岄潪甯告祦琛岀敤SoftReference鎴朩eakReference𨱒ュ疄鐜板浘鐗囩殑鍐呭瓨缂揿瓨锛屼絾鐜板湪涓嶅啀鎺ㄨ崘浣跨敤杩欎釜鏂规硶浜嗐傚洜涓轰粠Android 2.3 锛圆PI Level 9锛変箣钖庯纴鍨冨溇锲炴敹鍣ㄤ细镟寸Н鏋佺殑锲炴敹soft/weak镄勫紩鐢锛岃繖灏嗗艰嚧浣跨敤soft/weak寮旷敤镄勭紦瀛桦嚑涔庢病链夌紦瀛樻晥鏋溿傞‘甯︿竴鎻愶纴鍦ˋndroid3.0锛圆PI Level 11锛変互鍓嶏纴bitmap鏄鍌ㄥ瓨鍦╪ative 鍐呭瓨涓镄勶纴镓浠ョ郴缁熶互涓嶅彲棰勮佺殑鏂瑰纺𨱒ラ喷鏀绰itmap锛岃繖鍙鑳戒细瀵艰嚧鐭镞堕棿瓒呰繃鍐呭瓨闄愬埗浠庤岄犳垚宕╂簝銆 鏀惰捣
2. Android开发中ImageView里的Bitmap很模糊,怎么解决
背景和前景大小比列一定要一致,否则比列会把线条拉伸变得模糊
3. bitmap缩放到指定大小-android中怎么是bitmap缩小
如何对图片进行缩放到适应屏幕大小呀/**显示图片,使用BitmapFactory()*path
*图片SD卡路径****/
privatevoidshow_Image(Stringpath){
//TODOAuto-generatedmethodstub
opts=new();
=2;//宽高设置成原来的1/2
Bitmapbit=newBitmapFactory().decodeFile(path,opts);
show_(bit);
还有很多属性,你去查查吧,另外如果非要适应屏幕大小的话,你还需要获取屏幕的大小,然后图片大小跟屏幕大小比较,没弄过一定要图片跟屏幕大小填充满的判空,就算填充满,一定也会失真
android中怎么是bitmap缩小/**Bitmap放大的方法*/
privatestaticBitmapbig(Bitmapbitmap){
Matrixmatrix=newMatrix();
(1.5f,1.5f);//长和宽放大缩小的比例
BitmapresizeBmp=(bitmap,0,0,(),(),matrix,true);
returnresizeBmp;
}
这里放大缩小的方法都有:
android缩放和压缩的区别android缩放和压缩图片可以如下解释亏蠢:
压缩图片
这里简单的将一个图片文件转换为Bitmap,并且在转换的过程中对图片质量进行简单压缩:
(,intquality,FileOutputStreamfos);
注意这里的quality的范围为0~100,经过测试如果这个值设置比较低的话图片会非常不清晰,基本不可用,0~100的值可以参考类似Photoshop之类输出图片时选择的图片质量.
此方法只是单纯对图片质量进行处理,并不会改变其大小,如果需要改变图片文件的大小,最好是使用缩放,这个可以在保证一定的图片清晰度的情况下减少了图片大小,毕竟手机屏幕就那么点,你把2000px*1000px的图片改为500px*250px在手机用户看来也不会有太严重的不适感,而如果你只设置图片的quality想来改变文件大小,你最后会发现得到的是一个2000px*1000px的几个色块.
缩放图片
先提代码看看:
[java]viewplain
/**
*保持长宽比缩小Bitmap
*
*@parambitmap
*@parammaxWidth
*@parammaxHeight
*@return
*/
publicBitmapresizeBitmap(Bitmapbitmap,intmaxWidth,intmaxHeight){
intoriginWidth=();
intoriginHeight=();
//noneedtoresize
if(originWidth<maxWidth&&originHeight<maxHeight){
returnbitmap;
}
intwidth=originWidth;
intheight=originHeight;
//若图片过宽,则保持长宽比缩放图片
if(originWidth>maxWidth){
width=maxWidth;
doublei=originWidth*1.0/maxWidth;
height=(int)(originHeight/i);
bitmap=(bitmap,width,height,false);
}
//若图片过长,则从上端截取
if(height>maxHeight){
height=maxHeight;
bitmap=(bitmap,0,0,width,height);
}
//Log.i(TAG,width+"width");
//Log.i(TAG,height+"height");
returnbitmap;
}
这里演掘空瞎示是将图片缩小到一个max范围内,而不是直接将变成硬性的变成某个尺寸的图片,因为一般来说这种设置max的方式符合大部分需要,如果必须将图片变成某个指定尺寸可以直接使用方法,也是下面要介绍的.
此函数主要就是使用了Bitmap的两个静态方法,一个是:
(Bitmapsrc,intdstWidth,intdstHeight,booleanfilter)
此方法就会把一个Bitmap图片缩放成指定的尺寸.