Android系统处理图片方面并不怎么理想,稍不注意就内存溢出。在处理大尺寸图片,有时候只需要显示指定区域的图片,Android在2.3中提供了BitmapRegionDecoder类来解决此问题。

关于解决Bitmap加载内存溢出问题,可以查看Android使用BitmapFactory.Options解决加载大图片内存溢出问题。

public class DisplayImageRegionActivity extends Activity implements OnTouchListener {    private final Rect mRect = new Rect();    private BitmapRegionDecoder mDecoder;    private ImageView mView;        @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                mView = new ImageView(this);        mView.setAdjustViewBounds(true);        mView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));        mView.setScaleType(ScaleType.CENTER);        mView.setOnTouchListener(this);        setContentView(mView);                try {            InputStream is = getResources().openRawResource(R.drawable.a);            mDecoder = BitmapRegionDecoder.newInstance(is, true);        } catch (IOException e) {            e.printStackTrace();        }    }        @Override    public boolean onTouch(View v, MotionEvent event) {        final int action = event.getAction() & MotionEvent.ACTION_MASK;        final int x = (int) event.getX();        final int y = (int) event.getY();        switch (action) {        case MotionEvent.ACTION_DOWN:        case MotionEvent.ACTION_MOVE:            setImageRegion(x, y);            break;        }        return true;    }        private void setImageRegion(int left, int top) {//        BitmapFactory.Options opts = new BitmapFactory.Options();        final int width = mView.getWidth();        final int height = mView.getHeight();                final int imgWidth = mDecoder.getWidth();        final int imgHeight = mDecoder.getHeight();                int right = left + width;        int bottom = top + height;        if(right > imgWidth) right = imgWidth;        if(bottom > imgHeight) bottom = imgHeight;        if(left < 0) left = 0;        if(top < 0) top = 0;                mRect.set(left, top, right, bottom);        Bitmap bm = mDecoder.decodeRegion(mRect, null);        mView.setImageBitmap(bm);    }}

转自: http://orgcent.com/android-bitmapregiondecoder-image/

更多相关文章

  1. Android UI开发第二十二篇——android 瀑布流图片实现
  2. Android中给Button加上selector——点击按钮后变成不一样的图片
  3. Android图片异步加载的实现
  4. Android Handler内存泄漏解决方法
  5. android 内存消耗分析
  6. 一定要注意 Android 内存泄漏问题
  7. 【Android】 保存图片到系统图库, 并立即显示在图库中
  8. Android 获得图片并解码成缩略图以减少内存消耗
  9. Android加载/处理超大图片神器!SubsamplingScaleImageView(subsam

随机推荐

  1. Linux下安装mysql的方式(yum和源码编译两
  2. 分析Mysql大量数据导入遇到的问题以及解
  3. Windows系统下mysql5.7.21安装详细教程
  4. win10下mysql5.7.21安装详细过程
  5. mysql 5.7.21 安装配置方法图文教程(wind
  6. 详解Linux终端 MySQL常用操作指令
  7. mysql 5.7.21解压版安装配置方法图文教程
  8. mysql5.7.21安装配置教程
  9. mysql 5.7.21 winx64安装配置方法图文教
  10. mysql max 与 where 间的执行问题小结