Ich versuche herauszufinden, was Android macht, wenn es ein Bild skaliert, insbesondere die "Centerkrop" -Typ. Um eine Antwort zu finden, suchte ich den ImageView Quellcode und finde ihn here.Imageview Skalierungsmethode "Centercrop" als Code
Also, was ich versuchte, ist dieser Code:
public Bitmap buildBluredBoxBackground() {
int [] screenSize = Utilities.getScreenSize(mainActivityContext); //screensize[0] = x and [1] is y
Matrix mDrawMatrix = new Matrix();
Bitmap bitmap = ((BitmapDrawable)fullscreenViewHolder.imageViewArt.getDrawable()).getBitmap();
float scale;
float dx = 0, dy = 0;
if (bitmap.getWidth() * screenSize[1] > screenSize[0] * bitmap.getHeight()) {
scale = (float) screenSize[1]/(float) bitmap.getHeight();
dx = (screenSize[0] - bitmap.getWidth() * scale) * 0.5f;
} else {
scale = (float) screenSize[0]/(float) bitmap.getWidth();
dy = (screenSize[1] - bitmap.getHeight() * scale) * 0.5f;
}
mDrawMatrix.setScale(scale, scale);
mDrawMatrix.postTranslate(Math.round(dx), Math.round(dy));
result = Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),mDrawMatrix,true);
... //Some processing work
return result;
}
Aber es ist nicht mir das gleiche Ergebnis. Was mache ich falsch ?
Heres ein Beispiel:
Original-Bild
Orginal Image Centercrop
Versuchte-Code
Edit: XML des Image
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageViewFullscreenArt"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageViewFullscreenArtBluredBox"/>
</FrameLayout>
Also mein Image ist fullscreened. Deshalb verwende ich die screenSize, um sie zu verarbeiten.
-Code, wie ich es bin Anwendung
Bitmap bluredBoxBackground = buildBluredBoxBackground();
imageViewBluredBox.setImageDrawable(new BitmapDrawable(getResources(),bluredBoxBackground));
Ausführliche Beschreibung: Im Versuch, nur die gleiche Wirkung wie ImageView.setScaleType(ScaleType.CENTER_CROP)
zu bekommen. Also sollte mein Code das gleiche wie die ursprüngliche setScaleType
Methode tun. Warum brauche ich es als Code? Weil ich in meiner Situation den Zeichencache meiner ImageView nicht bekommen kann, aber ich muss & bearbeiten irgendwie bearbeiten.
Beitrag, den Code für die vollständige ziehbar? Wie wenden Sie es auf ImageView an? –
1) Sie erhalten die Bitmap aus dem 'ImageView', wo das Zeichen möglicherweise vom Original geändert wurde; 2) Sie verwenden die Größe des Bildschirms anstelle der Größe der Zielansicht; 3) Sie erstellen eine skalierte Bitmap, anstatt nur 'scaleType =" matrix "' zu verwenden. Ich muss mehr Code sehen, um zu verstehen, was Sie erreichen wollen, aber das sollte eine einfache Lösung sein. Veröffentlichen Sie den Code für Ihre Aktivität zusammen mit dem XML-Layout mit der Zielansicht und einer etwas detaillierteren Beschreibung des genauen Problems, das Sie lösen möchten. –
Ich habe meinen Beitrag mit Code und besserer Beschreibung meines Problems bearbeitet. Hoffe dieses Mal ist es klar zu verstehen. Danke für deine Hilfe –