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初步了解入门
  2. Android实现导航菜单左右滑动效果
  3. Android开发资源推荐
  4. Android(安卓)根文件系统启动过程
  5. android资源管理和使用资源 (2015.12.1)
  6. 使用DDMS测试安卓手机APP的性能(android)
  7. cocos2d-x3.2 在Windows下打包Android平台APK
  8. [置顶] Android平板、TV中对GridView的优化
  9. Android(安卓)Handler内存泄漏解决方法

随机推荐

  1. Android(安卓)XML解析
  2. Android不依赖Activity的全局悬浮窗实现
  3. Android图像开源视图:SmartImageView
  4. Android中做一个无标题窗口
  5. 系出名门Android(7) - 控件(View)之ZoomC
  6. Android联系人数据库全解析(5)
  7. Android中Parcelable接口的使用
  8. Android(安卓)Handler机制1--ThreadLocal
  9. android 2.3 r1 中文 api (58) —— TabH
  10. android layouts之RelativeLayout