位图超出范围错误

时间:2012-03-22 22:06:52

标签: java android bitmap

我正在将一组位图调整到一定百分比的屏幕(所以在所有设备上看起来都一样)。一些位图是大小为+ 256kb的精灵(爆炸等)。

显然,一旦位图转换两次,VM就会耗尽内存,位图只会在android应用程序的开头转换,但它仍然会出错。

任何人都可以告诉我,有没有更好,更快,更有效的方法将这些代码作为位图返回。

出于好奇,是通过引用传递的位图值? (与对象参数一样,对同一个对象使用相同的内存行吗?)。

无论如何这里是z代码:

public Bitmap ResizeBitmap(Bitmap bitmap, float s_percentage, int frames, int viewport_width, int viewport_height)
{
    float percentage = s_percentage / 100.0f;

    float scale = viewport_width / 100 * percentage;
    if(viewport_width < viewport_height)
    {
        scale = viewport_height / 100 * percentage;
    }

    int newWidth = (int) (bitmap.getWidth() * scale);
    int newHeight = (int) (bitmap.getHeight() * scale);

    if(newWidth <= 0 || newHeight <= 0)
    { 
        // Extra check, for invalid width/height
        Log.e("Function List, Resize Bitmap", "invalid dimension ("+newWidth+"x"+newHeight+")");
        return bitmap;
    }

    //Round up to closet factor of total frames
    int rW = (newWidth/frames)+1;
    newWidth = rW*frames;

    Bitmap newBitmap = Bitmap.createScaledBitmap(bitmap, newWidth, newHeight, false);

    return newBitmap;
}

1 个答案:

答案 0 :(得分:1)

要进入虚拟机预算,请尝试按比例缩小您的位图。

BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile( filename, options );
        options.inJustDecodeBounds = false;
        options.inSampleSize = 4; 

        bitmap = BitmapFactory.decodeFile( filename, options );
        if ( bitmap != null ) {
            bitmap = Bitmap.createScaledBitmap( bitmap, width, height, false );
        }

//将SampleSize调整为2,4,8等值