Создать растровое изображение с соотношением размеров экрана

от исходного_карты до нового_карты

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

Я хочу установить растровое изображение на обои, как

  1. избегать урожая
  2. scaleType:fit_center(выравнивание по центру по вертикали, сохранение исходного соотношения растрового изображения)

Как я могу это сделать? Нужно ли создавать новое растровое изображение?

2 ответа

Чтобы разместить растровое изображение на экране, ничего не вырезая, сначала необходимо решить, будет ли соотношение сторон больше, чем у экрана, или меньше. Если соотношение сторон изображения больше, чем соотношение сторон экрана, это означает, что растровое изображение больше и / или не так широко, как экран, как второе изображение в вопросе. Таким образом, вы должны масштабировать изображение на основе высоты следующим образом:

if(imageWidth/imageHeight > screenWidth/screenHeight){
    scaleFactor = screenHeight/imageHeight;
    imageXPosition = screenWidth/2-imageWidth/2;
    imageYPosition = 0;

В противном случае изображение должно быть масштабировано в зависимости от ширины:

}else{
    scaleFactor = screenWidth/imageHeight;
    imageXPosition = 0;
    imageYPosition = screenWidth/2-imageWidth/2;
}

Эти значения можно использовать для рисования растрового изображения с использованием матрицы или создания масштабированного растрового изображения с размерами imageWidth*scaleFactor а также imageHeight*scaleFactor и нарисовать его в imageXPosition | imageYPosition (это больше экономит память.

Вам нужно изменить размер изображения, чтобы создать новое растровое изображение в соответствии с размером экрана.

Вот код:

        Bitmap bitmapOrg = BitmapFactory.decodeFile(getApplicationContext()
                .getFilesDir().toString() + "/images/" + imagename);

        Log.e("imageheight", "" + bitmapOrg.getHeight());
        Log.e("imagewidth", "" + bitmapOrg.getWidth());

        double imageheight = bitmapOrg.getHeight();
        double imagewidth = bitmapOrg.getWidth();

        DisplayMetrics metrics = getApplicationContext().getResources()
                .getDisplayMetrics();
        double screenwidth = metrics.widthPixels;
        double sreeenheight = metrics.heightPixels;

        Log.e("screennwidth", "" + screenwidth);

        double newratio = screenwidth / imagewidth;

        Log.e("newratio", "" + newratio);

        double newratio1 = newratio * imageheight;
        double newratio2 = newratio * (imagewidth - 10); // 10 margin in width

        Log.e("newratio1", "" + newratio1);

        int mainheight = (int) newratio1;
        // int mainweidth = (int) imagewidth;
        int mainweidth = (int) newratio2;
        Log.e("Mainheight", "" + mainheight);
        Log.e("Mainweidtht", "" + mainweidth);

        // Here you will get the scaled bitmap
        Bitmap new_ScaledBitmap = Bitmap.createScaledBitmap(bitmapOrg, mainweidth,mainheight, true);
       // Use this bitmap as wallpaper
Другие вопросы по тегам