多媒体基础学习之显示大图像

加载并显示一副图像对内存使用情况具有显著的影响。

摄像头通常捕获2048*1536 像素的图像。

显示如此大小的32位图像将需要超过100663kb或大约13MB的内存。


Android 提供了一个名为BitmapFactory的实用的程序类,该程序类提供了一系列的静态方法,允许通过各种来源加载Bitmap图像。


针对我们的需求,将从文件加载图像,并在最初的活动中显示它。

BitmapFactory中的可用方法将会调用BitmapFactory.Options类,这使得我们能够定义如何将Bitmap读入内存。


BitmapFactory.Options bmFactoryOptions = new BitmapFactory.Options();

bmpFactoryOptions.inSampleSize = 8 ;

Bitmap bmp = BitmapFactory.decodeFile(imageFilePath,bmpFactoryOptions);

imv.setImageBitmap(bmp);


      这是一种快速加载大图像的方法,但是没有真正考虑图像的原始大小,也没有考虑屏幕的大小。最好能够将图像缩放到刚好适合屏幕。


显示维度来确定在加载图像时应该发生的减采样量。

当使用这些方法时,应确保该图像尽可能多地填充显示范围。但如果该图像只是要在任何一个维度中显示100个像素,那么应该使用这个值而不是显示维度,可以通过如下方式获得该值。

Display   currentDisplay  =  getWindowManager().getDefaultDisplay();

int dw = currentDisplay.getWidth();

int dh = currentDisplay.getHeight();


为了确定所有尺寸,我们使用了BitmapFactory 和Bitmapfactory.Options,并将BitmapFactory.Options.inJustDecodeBounds 变量设置为true.这将通知

BitmapFactory类只须返回该图像的范围,无须尝试解码图像本身。当使用此方法时,Bitmapfactory.Options.outHeight 和 BitmapFactory.Options.outWidth

变量将会被赋值。


//加载图像的尺寸而不是图像本身

BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();

bmpFactoryOptions.inJustDecodeBounds = true ;

Bitmap bmp = BitmapFactory.decodeFile(imageFilePath,bmpFactoryOptions);


int heightRatio = (int)Math.ceil(bmpFactoryOptions.outHeight/(float)dh);

int  widthRatio = (int)Math.ceil(bmpFactoryOptions.outWidth/(float)dw);


   简单地将图像的尺寸除以显示的尺寸将获得显示的比率。然后,可以选择是否使用高度比率或

高度比率,这取决他们当中谁更大。只须将这个比率作为BitmapFactory.Options.inSampleSize变量,这

将产生一副应该加载到内存中的图像,其尺寸接近于我们在这种情况下所需要的尺寸,也接近于显示本身的尺寸。


//如果两个比率都大于1,

//那么图像的一条边将大于屏幕

if(heightRatio > 1 && widthRatio >1 ){

     if(heightRatio > widthRation ){

         //若高度比率更大,则根据它缩放

         bmpFactoryOptions.inSampleSize = heightRatio

    }

}

明天再写。。











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值