我从cms中提取图像并且它们是横幅样式(宽度= 900,高度= 250)。我必须在全屏肖像模式下使用它们,所以它们自然会被严重扭曲。我用xml尝试了很多不同的东西,调整位图大小,毕加索变换等等。但是不知道还有什么可以尝试。我唯一能够保持质量的是中心剪裁,但这不是一个选择。我需要图像来保持其纵横比。这甚至可以在不牺牲纵横比的情况下做到吗?我的星系s5上的图像宽高比为1.7,而期望值为0.5625。
编辑以获取更多详细信息:
这是一个专有项目,所以我不能包含我使用的图像,但它们是横幅样式。它们用于screenSizeHeight - toolbarHeight
和screensizewidth / 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 :(得分:0)
嗯,由于所需的宽高比与实际比例相反,您可以简单地旋转横幅图像(-90º或+90º)。
当然,这是一个非常天真的建议。也许如果您提供有关要显示的内容或任何其他约束的更多详细信息,我们将能够提供更好的解决方案。