2013-07-21 3 views
0

у меня есть Bitmap с размером 1024x1024.png и мне нужно, чтобы растянуть его на разных экранах устройств, я попытался с помощью этого:большого размера растрового изображения подходит для небольших андроид телефонов

// given a resource, return a bitmap with a specified maximum height 
public static Bitmap maxHeightResourceToBitmap(Context c, int res, 
     int maxHeight) { 
    Bitmap bmp = imageResourceToBitmap(c, res, maxHeight); 


    int width = bmp.getWidth(); 
    int height = bmp.getHeight(); 

    int newHeight = maxHeight; 
    int newWidth = maxHeight/2; 

    // calculate the scale - in this case = 0.4f 
    float scaleHeight = ((float) newHeight)/height; 
    float scaleWidth = ((float) newWidth)/width; 

    // createa matrix for the manipulation 
    Matrix matrix = new Matrix(); 
    // resize the bit map 
    matrix.postScale(scaleWidth, scaleHeight); 

    // recreate the new Bitmap and return it 
    return Bitmap.createBitmap(bmp, 0, 0, width, height, matrix, true); 
} 

// given a resource, return a bitmap with a specified maximum height 
public static Bitmap scaleWithRatio(Context c, int res, 
     int max) { 
    Bitmap bmp = imageResourceToBitmap(c, res, max); 

    int width = bmp.getWidth(); 
    int height = bmp.getHeight(); 

    // calculate the scale - in this case = 0.4f 
    float scaleHeight = ((float) max)/height; 
    float scaleWidth = ((float) max)/width; 

    // createa matrix for the manipulation 
    Matrix matrix = new Matrix(); 
    // resize the bit map 
    matrix.postScale(scaleWidth, scaleHeight); 

    // recreate the new Bitmap and return it 

    return Bitmap.createBitmap(bmp, 0, 0, width, height, matrix, true); 
+0

Что вы думаете? – Simon

ответ

0

Для того, чтобы растянуть растровое изображение на экране Я бы рекомендовал сохранить растровое изображение в качестве оригинала в памяти (не делайте, чтобы битмап был больше в любом случае).

Затем, когда вы показать его на экране, как правило, с ImageView, вы можете установить вид изображения ScaleType на FIT_XY (см docs для получения дополнительной информации). Это растянет изображение на экране при рисовании, чтобы заполнить весь ImageView. Также убедитесь, что ваш ImageView заполняет весь экран, установив его LayoutParameters соответственно (например, введите родителя).

Единственная настоящая причина изменения размера растровых изображений в памяти - сделать их меньшим для сохранения памяти. Это важно, потому что устройства Android имеют ограниченную кучу, и если вы растровые изображения слишком велики в памяти, они заполнят всю вашу кучу, и вы столкнетесь с ошибками OutOfMemory. См. Это tutorial, если у вас проблемы с памятью.

Смежные вопросы