2016-07-08 68 views
1

我從cms拉取圖像,它們是橫幅樣式(寬度= 900,高度= 250)。我必須在全屏人像模式下使用它們,所以它們自然會嚴重扭曲。我已經嘗試了很多不同的東西與XML,調整位圖大小,畢加索轉換等..但不知道還有什麼嘗試在這一點上。我唯一能夠保持質量的是中心製作,但這不是一個選擇。我需要圖像來保持其寬高比。這甚至有可能在不犧牲寬高比的情況下完成?圖像縱橫比爲1.7,而我的銀河系s5上爲0.5625。Android位圖縮放橫幅圖像到肖像

編輯瞭解詳情:

這是一個專有的項目,所以我不能包括我使用的圖像,但他們是旗幟的風格。它們正在用於screenSizeHeight - toolbarHeightscreensizewidth/1.2的圖像視圖中。

這就是我想如何調整位圖的大小。這只是中心,而且太大了。

public static final Bitmap scaleAndCropBitmapByPixelDimensions(final Context context, final Bitmap sourceBitmap, final int targetWidth, final int targetHeight) 
{ 
    try 
    { 
     if (context != null && sourceBitmap != null) 
     { 
      int srcWidth = sourceBitmap.getWidth(); 
      int srcHeight = sourceBitmap.getHeight(); 

      float targetAspectRatio = (float)targetWidth/(float)targetHeight; 
      float srcAspectRatio = (float)srcWidth/(float)srcHeight; 

      int scaleWidth = targetWidth; 
      int scaleHeight = targetHeight; 
      int x = 0; 
      int y = 0; 


      if (srcAspectRatio < targetAspectRatio) 
      { 
       scaleWidth = targetWidth; 
       scaleHeight = (int)((float)(1/srcAspectRatio) * (float)scaleWidth); 
       x = 0; 
       y = (scaleHeight - targetHeight)/2; 
      } 
      else 
      { 
       scaleHeight = targetHeight; 
       scaleWidth = (int)((float)srcAspectRatio * (float)scaleHeight); 
       x = (scaleWidth - targetWidth)/2; 
       y = 0; 
      } 


      Bitmap scaledBitmap = Bitmap.createScaledBitmap(sourceBitmap, scaleWidth, scaleHeight, true); 
      Bitmap croppedBitmap = Bitmap.createBitmap(scaledBitmap, x, y, targetWidth, targetHeight); 
      return croppedBitmap; 
     } 
    } 
    catch (Exception ex) 
    { 
     //Log.e(LOG_TAG, "Error scaling and cropping bitmap", ex); 
     ex.printStackTrace(); 
    } 

    return null; 
} 

設置位圖變換

@Override 
      public Bitmap transform(Bitmap sourceBitmap) { 
       i_bitmap = Utils.scaleAndCropBitmapByPixelDimensions(mContext,sourceBitmap,targetWidth,targetHeight); 


       if (sourceBitmap != i_bitmap) { 
        // Same bitmap is returned if sizes are the same 
        sourceBitmap.recycle(); 
       } 

       return i_bitmap; 


      } 

imageview的XML

<ImageView 
    android:id="@+id/bg" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="center" 
    android:scaleType="center"  /> 

和與畢加索加載圖像 Picasso.with(mContext) .load(url) .transform(transformation) .into(getBg());

回答

0

好了,因爲所希望的縱橫比是相反的實際比例,有一點喲你可以簡單地旋轉橫幅圖像(-90º或+90º)。

當然,這是一個非常天真的建議。也許如果您提供有關要顯示的內容或任何其他限制的更多詳細信息,我們將能夠提供更好的解決方案。

+0

編輯了更多信息。不會旋轉使圖像側面或我誤解你的建議? – user3050491