Ich ziehe Bilder von einem cms und sie sind Banner-Stil (Breite = 900, Höhe = 250). Ich muss sie in einem Vollbild-Porträt-Modus verwenden, also sind sie natürlich stark verzerrt. Ich habe viele verschiedene Dinge mit XML versucht, Größe von Bitmaps, Picasso-Transformationen usw. geändert. Aber ich bin mir nicht sicher, was ich sonst noch versuchen sollte. Die einzige Zeit, in der ich in der Lage war, die Qualität zu erhalten, ist das Centercroping, aber das ist keine Option. Ich brauche das Bild, um sein Seitenverhältnis beizubehalten. Ist das überhaupt möglich, ohne das Seitenverhältnis zu opfern? Das Bildseitenverhältnis 1,7, während das gewünschte ist 0,5625 auf meiner Galaxie s5.Android Bitmap skalieren Banner Bild auf Porträt
bearbeiten, um weitere Informationen:
Dies ist ein proprietäres Projekt, so kann ich die Bilder nicht enthalten Ich verwende aber sie sind Banner-Stil. Sie werden in einer Bildansicht verwendet, die screenSizeHeight - toolbarHeight
und screensizewidth/1.2
ist.
so versuche ich die Größe der Bitmap zu ändern. Es ist nur Centercropping und ist viel zu groß.
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;
}
Einrichten des Bitmap umwandeln
@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;
}
Bildansicht xml
<ImageView
android:id="@+id/bg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:scaleType="center" />
und das Bild mit picasso ist Picasso.with(mContext) .load(url) .transform(transformation) .into(getBg());
eine Bearbeitung mit mehr Informationen gemacht. Würden Sie das Bild nicht rotieren lassen oder missverstehe ich, was Sie vorschlagen? – user3050491