Android图片的一些操作

来源:互联网 发布:mac u盘启动盘制作 编辑:程序博客网 时间:2024/06/05 03:34

一、加载大图片进内存的处理

// 加载大的图片进内存,很容易出现内存溢出的现象,因为每个应用程序的VM Heap都很小16M/32M左右// 因此经过处理后再加载进内存是比较合理的。// 1,获取屏幕分辨率WindowManager windowManager = getWindowManager();int screenWidth = windowManager.getDefaultDisplay().getWidth();int screenHeight = windowManager.getDefaultDisplay().getHeight();// 2,获取图片分辨率Options opts = new Options();opts.inJustDecodeBounds = true; // 不加载进内存,但能获取图片的一些基本信息。Bitmap bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory() + "/test.jpg",opts);int bitmapWidth = opts.outWidth;int bitmapHeight = opts.outHeight;// 3,计算压缩比率int dx = bitmapWidth / screenWidth;int dy = bitmapHeight / screenHeight;int kbps = 1;if (dx > dy && dy > 1) {kbps = dx;}if (dy > dx && dx > 1) {kbps = dy;}// 4,压缩图片并加载图片进内存opts.inSampleSize = kbps;opts.inJustDecodeBounds = false;bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory() + "/test.jpg",opts);imageView.setImageBitmap(bitmap);


二、复制拷贝图片及修改图片大小

/** * 复制图片及改变图片的大小 * @author Administrator * */public class MainActivity extends Activity {private Button loadButton;private ImageView srcImage, copyImage;private Bitmap srcBitmap, copyBitmap;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);loadButton = (Button) findViewById(R.id.loadButton);srcImage = (ImageView) findViewById(R.id.srcImage);copyImage = (ImageView) findViewById(R.id.copyImage);//原图加载,图片不可修改srcBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);srcImage.setImageBitmap(srcBitmap);loadButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//copyBitmap = Bitmap.createBitmap(srcBitmap);这种方式拷贝图片也是不能修改的//创建一个大小,属性和原图大小一样的Bitmap,但是是空的,这种方式拷贝的图片能修改。copyBitmap = Bitmap.createBitmap(srcBitmap.getWidth(),srcBitmap.getHeight(), srcBitmap.getConfig());//画布Canvas canvas = new Canvas(copyBitmap);//画笔Paint paint = new Paint();//设置图片的缩放比例,水平方向和竖直方向都变为一般//如果要放大,那就要注意了,因为我们创建的空白的copyBitmap大小就和原图一样大,所以即使放大了,也只能显示放大的部分。Matrix matrix = new Matrix();matrix.setScale(0.5f, 0.5f);//复制原图canvas.drawBitmap(srcBitmap, matrix, paint);copyImage.setImageBitmap(copyBitmap);}});}}


0 0
原创粉丝点击