Android图片的一些操作


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

// 加载大的图片进内存,很容易出现内存溢出的现象,因为每个应用程序的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;

	@Override
	protected 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() {
			@Override
			public 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值