Bild Decodierung und Manipulation mit JNI auf Android

Hintergrund

Bei einigen Apps ist es wichtig, große Bilder ohne OOM und auch schnell zu verarbeiten.

Hierfür kann JNI (oder Renderscript, das leider keine Dokumentation enthält) eine gute Lösung sein.

In der Vergangenheit ist es mir gelungen, mit JNI riesige Bitmaps zu drehen und dabei OOM (link) zu vermeidenHier , Hier undHier). Es war eine schöne (und doch ärgerlich harte) Erfahrung, aber am Ende hat es funktioniert.

das Problem

Das Android Framework hat viele Funktionen, um mit Bitmaps umzugehen, aber ich habe keine Ahnung, wie die Situation auf der JNI-Seite ist.

Ich weiß bereits, wie man eine Bitmap von Androids "Java World" an die "JNI World" und zurück weitergibt.

Was ich nicht weiß, ist, welche Funktionen ich auf der JNI-Seite verwenden kann, um mir mit Bitmaps zu helfen.

Ich möchte in der Lage sein, alle Bildoperationen (einschließlich der Dekodierung) auf JNI auszuführen, damit ich mich nicht um OOM kümmern muss, wenn große Bilder angezeigt werden, und am Ende des Prozesses die Daten in Java konvertieren kann. Bitmap (um den Benutzer anzuzeigen) und / oder in eine Datei zu schreiben.

Auch hier möchte ich die Daten auf der JNI-Seite nicht in eine Java-Bitmap konvertieren, um diese Operationen ausführen zu können.

Wie sich herausstellt, gibt es einige Bibliotheken, die viele Funktionen bieten (wieJavaCV), aber sie sind ziemlich groß und ich bin mir nicht ganz sicher über ihre Funktionen und ob sie wirklich die Dekodierung auf der JNI-Seite durchführen, würde ich es vorziehen zu wissen, was über die eingebaute JNI-Funktion von möglich ist Stattdessen Android.

die Frage

Welche Funktionen stehen für die Bildbearbeitung auf der JNI-Seite unter Android zur Verfügung?

Wie könnte ich beispielsweise die Gesichtserkennung für Bitmaps ausführen, Matrizen anwenden, Bitmaps herunterrechnen, Bitmaps skalieren usw.?

Bei einigen Operationen kann ich bereits über eine Möglichkeit nachdenken, sie zu implementieren (das Skalieren von Bildern ist recht einfach und Wikipedia kann sehr hilfreich sein), aber einige sind sehr komplex.

Selbst wenn ich die Operationen selbst implementiere, haben es vielleicht andere viel effizienter gemacht, wenn man an die vielen Optimierungen denkt, die C / C ++ haben kann.

Bin ich wirklich alleine, wenn ich auf die JNI-Seite von Android gehe, wo ich alles von Grund auf neu implementieren muss?

nur um klar zu stellen, was mich interessiert ist:

Eingabebitmap auf Java -> Bildbearbeitung nur in JNI und C / C ++ (keine Konvertierung in Java-Objekte) -> Ausgabebitmap auf Java.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage