2013-04-02 4 views
0

Я хочу показать 4 изображения в формате 2 х 2 сетки на экране. Изображения получены из поиска изображений в Google и изображения квадрата 200 X 200Подход к масштабированию изображения

Это мой подход к их масштабированию. RelativeLayout с 4 вложенными RelativeLayout, и каждый макет имеет imageView в нем. и именно так я получаю ширину экрана для масштабирования изображений. Настройка внутренней компоновки высоты и ширины на screenWidth/2, а затем масштабирование изображений.

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

public static int getOptionWidth(Context context) { 
    DisplayMetrics metrics = context.getResources().getDisplayMetrics(); 
    return metrics.widthPixels; 
} 

optionWidth = (getOptionWidth(context)/2) 

Это для немасштабированного растрового

public static Bitmap resourceDecoder(byte[] imgBytes, int destWidth, int destHeight) { 
    Options options = new Options(); 
    options.inJustDecodeBounds = true; 
    BitmapFactory.decodeByteArray(imgBytes, 0, imgBytes.length, options); 
    options.inJustDecodeBounds = false; 


    float srcAspect = (float) srcWidth/(float) srcHeight; 
    float dstAspect = (float) dstWidth/(float) dstHeight; 

     if (srcAspect > dstAspect) { 
      options.inSampleSize = srcHeight/dstHeight; 
     } else { 
      options.inSampleSize = srcWidth/dstWidth; 
     } 
    Bitmap unscaledBitmap = BitmapFactory.decodeByteArray(imgBytes, 0, imgBytes.length, options); 

    return unscaledBitmap; 
} 

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

Rect srcRect = getSrcRect(unscaledBitmap.getWidth(), unscaledBitmap.getHeight(), dstWidth, dstHeight); 
Rect dstRect = getDstRect(unscaledBitmap.getWidth(), unscaledBitmap.getHeight(), dstWidth, dstHeight); 
Bitmap scaledBitmap = Bitmap.createBitmap(dstRect.width(), dstRect.height(), Config.ARGB_8888); 
Canvas canvas = new Canvas(scaledBitmap); 
canvas.drawBitmap(unscaledBitmap, srcRect, dstRect, new Paint(Paint.FILTER_BITMAP_FLAG)); 

return scaledBitmap; 

Это работает отлично и результаты приходят, как ожидалось (проверено на ИПЧР, xhdpi и MDPI). Но теперь я смущен, поскольку не использую преобразование dxtopx или pxTodX. Я что-то упускаю? хотя результаты, как и ожидалось, меня немного беспокоит подход. Я не знаю, следует ли использовать pxToDx или наоборот. Если я сделаю, как это повлияет на мой результат и как я буду использовать их.

+0

Я не понимаю ваш вопрос. – Vincent

+0

Извините, что ... пожалуйста, дайте мне знать, где я запутался или какую часть я должен отредактировать, чтобы лучше понять вопрос. – user2095470

+0

«dxtopx» меня смутил. Кроме того, ваш вопрос был бы лучше, если бы вы могли обобщить вашу проблему в начале. Не ожидайте, что люди прочитают весь текст. Они будут читать только, если они думают, что могут помочь вам, прочитав первые несколько строк. Кроме того, пожалуйста, перепишите заголовок вопроса. Вы должны знать, что ваша проблема непосредственно из названия. – Vincent

ответ

0

Для этого вам не нужно использовать преобразование PX в DP, поскольку вы уже установили все свои переменные размера относительно ширины экрана, используя getOptionWidth (контекст).

+0

Пожалуйста, проверьте мои изменения ... извините за это. – user2095470

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