bitmap缩放android
① 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图片缩放成指定的尺寸.
② 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锛岃繖鍙鑳戒细瀵艰嚧鐭镞堕棿瓒呰繃鍐呭瓨闄愬埗浠庤岄犳垚宕╂簝銆 鏀惰捣
③ Android 图片加载(一)高效加载Bitmap 基础篇
由于Bitmap的特殊性以及Android对单个应用所规定的最大内存限制,我们在同时加载大量Bitmap时很容易发生内存溢出,即我们通常所说的OutOfMemoryError(OOM),因此高效加载Bitmap就成为了每个Android开发者的必备技能。
在学习如何高效地加载Bitmap之前,首先介绍一下如何加载一个Bitmap。我们都知道,Bitmap在Android中通常指的是一张图片,那么如何将JPG、PNG等格式的图片转换成Bitmap对象呢?BitmapFactory类给我们提供了一些方法:
接下来开始介绍如何高效地加载Bitmap,其实核心思想很简单: 就是采用BitmapFactory.Options参数来调整图片尺寸来适配控件的大小。
假如我们显示图片的控件ImageView宽高为100×100像素,而图片的尺寸为1024×1024像素,这个时候如果将整个图片加载进来并显示到控件上,自然是很占用内存资源的。这个时候可以通过BitmapFactory.Options按一定的采样率加载缩小后的图片,再将缩小后的图片显示到ImageView中,这样就能减小内存占用从而在一定程度上避免OOM的发生。
通过BitmapFactory.Options来缩放图片,主要是使用它的inSampleSize参数,也就是前面提到的采样率。当采样率inSampleSize为1时,采样后的图片大小为原图大小;当采样率inSampleSize>1,比如为2时,采样后的图片宽高都为原图的1/2,即像素降为原图的1/4,占用的内存大小也就是原图的1/4;比较特殊的是,当采样率inSampleSize<1时,系统会自动将该值当做1来处理。 因此可以得出一个结论:采样率inSampleSize必须是大于1的整数图片才会有缩小的效果,并且采样率同时作用于宽高,也就是说采样后的图片会缩小到原图的1/(inSampleSize^2)。比如inSampleSize=4,那么缩放比例为1/16。
我们现在知道了,通过采样率可以提高图片的加载效率,那么如何才能计算出最合适的采样率?我们可以按照如下流程:
接下来以decodeFile方法为例实现图片的缩放,其他三个方法处理方式类似。
下一篇: Android 图片加载(二)图片加载框架Glide 入门篇
《Android开发艺术探索》
④ Android开发中ImageView里的Bitmap很模糊,怎么解决
背景和前景大小比列一定要一致,否则比列会把线条拉伸变得模糊
⑤ android bitmap 图片缩放问题
在使用Bitmap进行位图读取和显示的时候需要注意在生成位图时,系统会根据不同的情况来缩小、放大图像。
当把图片放到drawable文件夹中时,160密度的模拟器显示的图像有放大效果,240密度的模拟器显示原尺寸的图像。
当把图片放到drawable-hdpi文件夹中时,160密度的模拟器显示出的图像有缩小效果,240密度的模拟器显示原尺寸的图像。
当把图片放到drawable-mdpi文件夹中时,160密度的模拟器显示原尺寸的图像,240密度的模拟器显示放大的图像。
当把图片放到drawable-ldpi文件夹中时,160、240密度的模拟器都显示放大的图片。
由此可以看出,在使用Bitmap显示图像时,一般应放在drawable-hdpi文件夹中,这样可以根据屏幕的密度来调整图像大小,比如再做游戏时,大屏幕的与小屏幕的手机中,人物或物体应该有大小之分。望求采纳谢谢...