很无语的事情,昨天碰到了200x1000的位图,然后我把这个位图用public static Bitmap preScaleBitmap(Bitmap temp, float drawScale) {
        float scaleWidth = DataManager.deviceWidth - 20;
        // float scaleHeight=(int)((DataManager.deviceWidth-20)*drawScale);
        float scale = scaleWidth / temp.getWidth();
        Matrix matrix = new Matrix();
        matrix.postScale(scale, scale);
        // matrix.postScale(0.5f, 0.5f);
        Bitmap temp2 = Bitmap.createBitmap(temp, 0, 0, temp.getWidth(),
                temp.getHeight(), matrix, true);
        return temp2;
    }这个函数拉到了手机屏幕的宽度-20px,长度也按这宽度增的比例进行的。 我手机用的480x800,如此的话,这个图片还是要滚3个屏幕才能看完。但是在滚动的过程中经常会出现挂掉~有没有什么好的方法处理这个图片的显示啊? 设计要求是拉到屏幕宽度,高度按宽度拉伸比例走~

解决方案 »

  1.   

    都没人理我啊~我来传个图,说明我遇到的情况这张图的分辨率是 400x2200 的,我被要求这个图片作定宽,然后长度按照宽度放大或缩小的比例变换。以480x800的手机为例,要求宽度为480-20=460px  。这些当然是可以实现的,问题是这么大的一张图,我放在imageview里。手机屏幕当然是无法完整显示这张图的。于是在scroll的过程中,经常会有挂掉。挂掉的原因是我在 作定宽运算时的浮点运算。还有时是Out of memory~总之,怎么让这张图片 能显示不挂掉呢?先想不挂掉的问题,再想作 定宽的问题。
      

  2.   

    Out of memory处理bitmap经常遇到的,没啥好的解决方案
      

  3.   

    要获得一张放大的图片,不一定非得Bitmap.createBitmap可以drawBitmap的时候,改变Matrix就行了我有一张960X854的图片,无论怎么缩放都不会出问题
      

  4.   

    唉,我是用webview显示的最后,怎么也不挂倒是~4楼说得也好啊~
      

  5.   

    通过限制加载像素大小可以解决问题。看看这个这篇文章Android使用BitmapFactory.Options解决加载大图片内存溢出问题
      

  6.   

    BitmapFactory.Options options = new BitmapFactory.Options();  
      options.inJustDecodeBounds = true;  
      BitmapFactory.decodeResource(getResources(), R.drawable.picture, options);  
      int orgHeight = options.outHeight;  
      int orgWidth = options.outWidth;  
            options.inSampleSize = orgWidth/Static.screenWidth;  
            options.inJustDecodeBounds = false;  
            Static.picture = BitmapFactory.decodeResource(getResources(), R.drawable.picture, options); 
            
      

  7.   

    BitmapFactory.Options options = new BitmapFactory.Options();  
       options.inJustDecodeBounds = true;  
       BitmapFactory.decodeResource(getResources(), R.drawable.picture, options); //这里的位图是空的,原因是options.inJustDecodeBounds为true,但是可以获得位图的长宽,所以此次内存不会溢出   int orgHeight = options.outHeight;  
       int orgWidth = options.outWidth;  
            options.inSampleSize = orgWidth/Static.screenWidth;  //按照比例缩放到屏幕宽度
            options.inJustDecodeBounds = false;  
            Static.picture = BitmapFactory.decodeResource(getResources(), R.drawable.picture, options); //绘制缩放后的位图