多媒体基础学习之显示大图像
2014-06-13 00:44
218 查看
加载并显示一副图像对内存使用情况具有显著的影响。
摄像头通常捕获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
}
}
明天再写。。
摄像头通常捕获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
}
}
明天再写。。
相关文章推荐
- dreamweaver的学习 【基础知识】4 图像处理,多媒体
- 零基础学习IOS开发(三)- cocos2d-x3.0 显示图像及基本动画效果
- Oracle基础学习二:表的创建 数据的操作 在VS程序中的查询显示
- CSS基础应用学习系列(3)——图像的CSS阴影效果
- Opencv学习笔记-显示图像
- c#学习之基础篇(动态打开,显示,保存,另存为 图片)[待续]
- OpenCV学习笔记-显示图像
- XML基础知识学习八(使用XSL来显示XML数据)
- 多媒体基础知识--编解码学习
- php学习1-基础知识变量定义,输出显示,(eval,exit,die)
- 【Ubuntu+OpenCV】ubuntu/linux环境下,运用opencv实现图像的读入、显示--学习笔记【1】
- GDI+ 学习记录(26) 显示图像 - Image
- VC学习笔记:图像显示
- GDI+ 学习记录(26): 显示图像 - Image
- 《HTML & XHTML权威指南》的学习笔记03 -- 第五章.分隔线,图像,多媒体
- Oracle基础学习二:表的创建 数据的操作 在VS程序中的查询显示
- CSS基础应用学习系列(1)——基于图像的翻转
- windows编程学习笔记之基础文字显示
- OpenCV学习笔记(9)利用MFC的Picture控件显示图像+播放视频和捕获摄像头画面
- vc图像处理学习笔记1-图像格式分析及显示