wie man das Ausgabebild setzt, benutze com.android.camera.action.CROP

8

Ich habe Code, um ein Bild wie folgt zuzuschneiden:

%Vor%

von dem, was ich gelesen habe, wird der Code intent.putExtra("outputX", 300); intent.putExtra("outputY", 300); verwendet, um die Auflösung des Crop-Ergebnisses zu setzen, aber warum kann ich nicht die Ergebnisbildauflösung höher als 300x300 bekommen? wenn ich die intent.putExtra("outputX", 800); intent.putExtra("outputY", 800); die Crop-Funktion hat kein Ergebnis oder Absturz, irgendeine Idee für diese Situation?

Die Log-Katze sagt "!!! FAILED BINDER TRANSACTION!!!!

    
adi.zean 06.10.2012, 09:19
quelle

2 Antworten

8

Diese Absicht ist nicht Teil der öffentlichen Android-API und funktioniert nicht auf allen Geräten. Es wurde in früheren Versionen von Android 1.x und 2.x verwendet, wird aber nicht mehr verwendet und wird nicht empfohlen. Das ist wahrscheinlich der Grund, warum es überall auf dem Platz zusammenbricht oder unsachgemäß arbeitet.

Verwenden Sie Methoden wie Bitmap.createBitmap(..) oder Bitmap.createScaledBitmap(..) , um eine skalierte oder zugeschnittene Version Ihres Originalbilds zu erstellen. Diese sind Teil der Android-API und funktionieren garantiert.

Siehe offizielle Dokumentation hier und hier

Um eine Bitmap zuzuschneiden, können Sie Bitmap.createBitmap(Bitmap, int x, int y, int width, int height) verwenden. Wenn Sie beispielsweise 10 Pixel von jeder Seite einer Bitmap zuschneiden müssen, verwenden Sie Folgendes:

%Vor%

Wenn Sie den Selektor dem Benutzer zeigen müssen. Dann können Sie so etwas tun:

%Vor%

Code von hier

    
Anup Cowkur 06.10.2012, 10:04
quelle
27

Diese Frage ist alles über Stackoverflow. Und ich bin froh, dass es in letzter Zeit so war. Ich werde mein Bestes geben, um einige Duplikate zu markieren, aber ich bevorzuge diese, da sie das Problem mit der begrenzten Bildgröße anspricht.

Kurze Antwort

Die kurze Antwort besteht nicht darin, die Rückgabedatenoption zu verwenden. Weitere Informationen zu dieser Option und zum Abrufen des Bildes erhalten Sie hier: Ссылка . Der Artikel macht einen guten Job, indem er die (bekannten) Konfigurationsoptionen für die Absicht und ihre Verwendung auflistet.

  

Option # 2: Wenn Sie die Rückgabedaten auf "false" setzen, erhalten Sie keine   Bitmap zurück von der onActivityResult Intent in-line, stattdessen werden Sie   muss MediaStore.EXTRA_OUTPUT auf einen Uri (nur des Dateischemas) setzen   Wo soll die Bitmap gespeichert werden? Dies hat einige Einschränkungen,   Zuerst müssen Sie einen temporären Speicherort für das Dateisystem haben, um den   Dateischema URI, kein großes Problem (außer auf einigen Geräten, die nicht   habe SDCards).

%Vor%

Codebeispiel von: Ссылка

Weitere Informationen

Die lange Antwort ist, diese Absicht überhaupt nicht zu verwenden. Lesen Sie weiter, um herauszufinden, warum.

Inoffizielle API

Der Kern des Problems ist die inoffizielle Absicht. Inoffiziell wie in keinem öffentlichen API. Derzeit funktioniert es für die meisten Geräte, aber die meisten sind einfach nicht genug. Auch Google kann diese Absicht jederzeit ändern, ohne Sie zu informieren. Alle Apps, die es verwenden, werden durchbrochen. Ähnlich wie die Kalender-API einmal inoffiziell war. In der Tat hat sich dieser Ernteabsicht bereits einmal geändert. Also vermeide es, diese Absicht zu benutzen. Es gibt Alternativen. Fühlen Sie sich frei, diesen Rat zu ignorieren.

Um die Erklärung "funktioniert für einige Geräte" zu überprüfen, folgen Sie diesem Link und genießen Sie frustrierte Android-Entwickler, die darüber diskutieren, was als Teil der Kernfunktionen von Android zu betrachten ist (und nicht ist): Ссылка

Zeit für Beispielcode? Überprüfen Sie dieses GitHub-Projekt: Ссылка

Über Größenbeschränkung

Ein weiteres Problem, das ich beim Erkunden dieser Absicht erfahren habe, ist die Bildgrößenbeschränkung. Dies kann leicht unter Verwendung des obigen Beispielcodes und einer Bildgröße von etwas über 300 Pixel reproduziert werden. Im Grunde geht es um diese ursprüngliche Frage. Im besten Fall stürzt deine App ab. Aber ich habe schlimmeres gesehen als hängende Geräte, die nur durch Entfernen der Batterie zurückgesetzt werden konnten.

Wenn Sie jetzt die Option "return-data" entfernen, können Sie sie erneut ausführen. Weitere Informationen darüber, wie Sie zu dem Ergebnis gelangen, finden Sie in der kurzen Antwort, in der ich bereits auf diesen Link verwiesen habe: Ссылка

Die Lösung

Also eine Menge Probleme. Probleme erfordern eine Lösung. Die einzige vernünftige Lösung, bis Google eine öffentliche API dafür entwickelt, ist die Bereitstellung Ihrer eigenen Kulturabsicht. Holen Sie sich einfach eine richtige Pflanzenbibliothek wie diese auf GitHub: Ссылка

Dem Projekt fehlt eine Dokumentation, aber da es sich um einen Auszug der inoffiziellen Androiden-Absicht handelt, können Sie die oben aufgeführten Beispiele verwenden, um loszulegen. Stellen Sie sicher, dass Sie die Option return-data nicht verwenden. Ah und überprüfen Sie die CropImageIntentBuilder-Klasse. Auf diese Weise können Sie leicht eine Absicht für das Zuschneiden erstellen. Vergessen Sie nicht, diese Aktivität Ihrem Manifest und den Berechtigungen zum Schreiben in externen Datenspeicher hinzuzufügen.

%Vor%

Die Verwendung dieser Bibliothek öffnet auch die Türen für mehr Anpassung. Gut zu wissen ist die Kern-Bitmap, die funktionell für die Größenanpassung verwendet wird: So beschneiden Sie die Bild in Android geparst?

Und das ist es. Viel Spaß!

    
hcpl 17.04.2013 09:08
quelle