Androidx学习笔记(72)--- 加载大图片
来源:互联网 发布:2017下半年软件设计师 编辑:程序博客网 时间:2024/05/17 21:54
多媒体编程
- 文本、图片、音频、视频
图片
- 图片在计算机中的大小
- 图片的总大小 = 图片的总像素 * 每个像素占用的大小
- 单色位图:只能表示2种颜色
- 使用两个数字:0和1
- 使用一个长度为1的二进制数字就可以表示了
- 每个像素占用1/8个字节
- 16色位图:能表示16种颜色
- 需要16个数字:0-15,0000 - 1111
- 使用一个长度为4的二进制数组就可以表示了
- 每个像素占用1/2个字节
- 256色位图:能表示256种颜色
- 需要256个数字:0 - 255,0000 0000 - 1111 1111
- 使用一个长度为8的二进制数字
- 每个像素占用1个字节
- 24位位图:
- 每个像素占用24位,也就是3个字节,所在叫24位位图
- R:0-255,需要一个长度为8的二进制数字,占用1个字节
- G:0-255,需要一个长度为8的二进制数字,占用1个字节
- B:0-255,需要一个长度为8的二进制数字,占用1个字节
加载大图片
- 计算机把图片所有像素信息 (图片的总像素 * 每个像素占用的大小) 全部解析出来,保存至内存
- Android保存图片像素信息,是用ARGB保存
- 手机屏幕320*480,总像素:153600
- 图片宽高2400*3200,总像素7680000
- 2400(图片宽) / 320(手机屏幕宽) = 7
- 3200(图片高) / 480(手机屏幕高) = 6
- 使用最大的比例 也就是要使用7 即可。
------
对图片进行缩放
获取屏幕宽高
Display dp = getWindowManager().getDefaultDisplay();int screenWidth = dp.getWidth();int screenHeight = dp.getHeight();
获取图片宽高
Options opts = new Options();//请求图片属性但不申请内存opts.inJustDecodeBounds = true;BitmapFactory.decodeFile("sdcard/dog.jpg", opts);int imageWidth = opts.outWidth;int imageHeight = opts.outHeight;
图片的宽高除以屏幕宽高,算出宽和高的缩放比例,取较大值作为图片的缩放比例
int scale = 1;int scaleX = imageWidth / screenWidth;int scaleY = imageHeight / screenHeight;if(scaleX >= scaleY && scaleX > 1){ scale = scaleX;}else if(scaleY > scaleX && scaleY > 1){ scale = scaleY;}
按缩放比例加载图片
//设置缩放比例opts.inSampleSize = scale;//为图片申请内存opts.inJustDecodeBounds = false;Bitmap bm = BitmapFactory.decodeFile("sdcard/dog.jpg", opts);iv.setImageBitmap(bm);
--------------
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void click(View v){
//解析图片时需要使用到的参数都封装在这个对象里了
Options opt = new Options();
//不为像素申请内存,只获取图片宽高
opt.inJustDecodeBounds = true;
BitmapFactory.decodeFile("sdcard/dog.jpg", opt);
//拿到图片宽高
int imageWidth = opt.outWidth;
int imageHeight = opt.outHeight;
Display dp = getWindowManager().getDefaultDisplay();
//拿到屏幕宽高
int screenWidth = dp.getWidth();
int screenHeight = dp.getHeight();
//计算缩放比例
int scale = 1;
int scaleWidth = imageWidth / screenWidth;
int scaleHeight = imageHeight / screenHeight;
if(scaleWidth >= scaleHeight && scaleWidth >= 1){
scale = scaleWidth;
}
else if(scaleWidth < scaleHeight && scaleHeight >= 1){
scale = scaleHeight;
}
//设置缩放比例
opt.inSampleSize = scale;
opt.inJustDecodeBounds = false;
Bitmap bm = BitmapFactory.decodeFile("sdcard/dog.jpg", opt);
ImageView iv = (ImageView) findViewById(R.id.iv);
iv.setImageBitmap(bm);
}
}
0 0
- Androidx学习笔记(72)--- 加载大图片
- 高效加载大图片
- 大图片加载问题
- Android 加载大图片
- 大图片延时加载
- android 加载大图片
- android加载大图片
- 高效加载大图片
- Android-加载大图片
- android加载大图片
- android 加载大图片
- 加载大图片
- 加载大图片
- android加载大图片
- 高效加载大图片
- 加载大图片
- Android 加载大图片
- Android 加载大图片
- Kubernetes基本术语与架构
- Android Studio的使用技巧 PS:源码解读
- TooBar的使用
- Androidx学习笔记(71)--- 需要支付的应用(调用远程的服务)
- ListView显示最后一条Item不完整问题分析
- Androidx学习笔记(72)--- 加载大图片
- Kubernetes集群环境搭建on Centos7
- bzoj1413 取石子游戏 递推
- Android ROM开发(一)——Windows下Cygwin和Android_Kitchen厨房的安装
- 趣味算法-打印数字 (1)
- GDKOI2016总结
- gdkoi2016爆零记
- mybatis之映射文件
- opencv 摄像头和视频操作的两种方法