MainActivity:
package com.itheima.loadimage; import android.os.Bundle; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.BitmapFactory.Options; import android.graphics.Point; import android.view.Display; import android.view.Menu; import android.view.View; import android.widget.ImageView; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } /*#加载大图片 * 计算机把图片所有像素信息全部解析出来,保存至内存,会内存溢出,因此要缩放。 * Android保存图片像素信息,是用ARGB保存 * 手机屏幕320*480,总像素:153600 * 图片宽高2400*3200,总像素7680000 图片的总像素大于屏幕的总像素,因此要对图片进行缩放,否则内存会溢出。 * 2400 / 320 = 7,宽缩放比例 * 3200 / 480 = 6,高的缩放比例 图片的宽和高的缩放比例要一样,选择大的作为缩放比例。*/ public void click(View v){ //解析图片时需要使用到的参数都封装在这个对象里了 Options opt = new Options(); //不返回图片不加载图片到内存只获取图片宽高,避免了内存溢出。 opt.inJustDecodeBounds = true; BitmapFactory.decodeFile("sdcard/dog.jpg", opt);//该方法返回null //拿到图片宽高 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;//设置false就会去加载图片到内存而不是仅仅加载图片的信息, Bitmap bm = BitmapFactory.decodeFile("sdcard/dog.jpg", opt);//bm就是缩放之后的图片 ImageView iv = (ImageView) findViewById(R.id.iv); iv.setImageBitmap(bm); } }
#多媒体概念 * 文字、图片、音频、视频 #计算机图片大小的计算 > 图片大小 = 图片的总像素 * 每个像素占用的大小 * 单色图:每个像素表示一种颜色,则用1位就可以表示0-1,则每个像素占用1/8个字节,图片大小等于图片的像素数乘以每个像素的大小。 * 16色图:每个像素有16种颜色,则用4位0000-1111就可以表示了,即占用4位,一个字节有8位,则每个像素占用1/2个字节,图片大小等于图片的像素数乘以每个像素的大小。 * 256色图:每个像素有256种颜色,则用8位就可以表示了00000000-11111111,每个像素占用1个字节,图片大小等于图片的像素数乘以每个像素的大小。 * 24位图:每个像素占用24位则3个字节,图片大小等于图片的像素数乘以每个像素的大小。
时间: 2024-10-17 03:13:09