Bei einem Bild mit Alpha-Kanal (Transparenz) möchte ich jeden Leerraum zwischen den Bildgrenzen und dem eigentlichen Bild entfernen. Dies sollte in einem Backgound-Task oder mit einem Ladebildschirm erfolgen, mit einer akzeptablen Laufzeit, um die Benutzererfahrung nicht zu beeinträchtigen.
Wie kann ich dieses Ergebnis erreichen?
Ich hatte Schwierigkeiten, Best Practices oder sogar Ratschläge zu finden, um mein Problem zu lösen. Basierend auf dieser Antwort von JannGabriel , der das Bild richtig und tief schneidet, indem es die Bildgröße reduziert, habe ich einen Schritt weiter gemacht und auch die oberen und linken Leerräume entfernen und die Bearbeitungszeit allgemein verbessern. Das Ergebnis ist gut und ich verwende es derzeit in meinem Projekt. Ich bin ziemlich neu in der Android-Programmierung und jeder Hinweis auf diese Methode ist willkommen.
%Vor%Erklärung: Für jede Seite des Bildes wird eine FOR-Schleife ausgeführt, um zu prüfen, ob die Pixel keine transparente Farbe enthalten, und die erste nicht-transparente Pixel-Nutzkoordinate zurückzugeben. Dies geschieht durch das Ausarbeiten von Koordinaten, wobei als Basis die entgegengesetzte Dimension als die zu schneidende Dimension verwendet wird: Um y zu finden, scanne x für jedes y.
Um zu überprüfen, wo der Vertical-Top-Leerraum endet, führt er die folgenden Schritte aus:
Für die anderen Dimensionen werden ähnliche Methoden verwendet, wobei nur die Richtung des Scans geändert wird.
Sobald die 4 Koordinaten für die ersten nützlichen Pixel des Bildes erhalten wurden, wird die Bitmap.createBitmap
-Methode aufgerufen, mit der ursprünglichen Bitmap als Basisbild, und die nützlichen Pixelkoordinaten als Oben-Links und Unten-Rechts-Grenzen für die Größe ändern.
Hinweis 1: Es ist nützlich zu beachten, dass die Koordinaten 0, 0 gleich Oben links sind.
Hinweis 2: Die Endbreite und -höhe in Bitmap.createBitmap werden um die neue relative Startkoordinate reduziert, andernfalls werden die Grenzen falsch unten rechts verschoben. Stellen Sie es so dar: Sie haben ein Bild 100x100px, also mit Endkoordinaten 100.100. Wenn Sie die Startkoordinaten auf 50,50 setzen, werden die Endkoordinaten des Elaborationsrechtecks auf 150,150 (100 Originalkoordinaten + 50 des modifizierten Startpunkts) gebracht und außerhalb der ursprünglichen Bildgrenzen verschoben. Um dies zu vermeiden, wird die neue Endkoordinate um die neue Startkoordinate reduziert (100 + 50 neue Startkoordinate - 50 neue Startkoordinateneinstellung)
Hinweis 3: In der ursprünglichen Antwort wird eine Überprüfung für alle Pixel in einer bestimmten Richtung ausgeführt, wobei die gleiche Dimension der Koordinate verwendet wird, um das am weitesten fortgeschrittene nützliche Pixel zu finden. Das Überprüfen der entgegengesetzten Dimension und das Anhalten am ersten nützlichen Pixel erhöhte die Leistung.
Tags und Links android image whitespace crop