2014-09-07 2 views
0

original_Bitmap to new_Bitmapсоздать битмап к коэффициенту сохранения размера экрана

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

Я хочу установить Bitmap и обои, как

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

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

+0

Так что вы хотите Bitmap, чтобы заполнить весь экран или не быть обрезаны, как в приведенных выше? – Gumbo

+0

изображений @Gumbo не быть обрезаны, как изображение выше !! – HoJunLee

ответ

0

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

Вот код:

 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 
+0

ммм .. спасибо так много для ответа мне, но этот код не работает .... – HoJunLee

0

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

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

Else изображение должно быть соизмеримо на основе ширины, как это:

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

Вы можете использовать эти значения для рисования растрового изображения с помощью a Matrix или создать масштабированный растровый рисунок с размерами imageWidth*scaleFactor и imageHeight*scaleFactor и нарисовать его на imageXPosition | imageYPosition (это больше экономии памяти.

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