2016-05-02 10 views
0

Ich entwickle eine App, die sich mit Bildern beschäftigt und Filter, Rahmen usw. auf das Bild anwendet. (Wie Bildbearbeitungs-App).Anwenden von Effekten auf HD-Bilder

Ich habe Probleme beim Anwenden von Filtern oder Rahmen auf HD-Bilder (da die Bilder von unterschiedlicher Größe und Auflösung sein werden).

Meine Frage ist, wie ich Filter anwenden, ohne die Größe oder Dimension des Bildes zu ändern. Bitte helfen Sie diesbezüglich, Vielen Dank im Voraus.

Wie ich im Kommentarabschnitt des Codes erwähnt habe, gibt getDrawingCache für kleinere Bilder einen Wert zurück, aber für größere Bilder gibt es null zurück.

public Bitmap getBorderAppliedBitmap(PorterShapeImageView imgView , GPUImage gpuImage) 
{ 
    Bitmap bmp = gpuImage.getBitmapWithFilterApplied(); 
    imgView.setImageBitmap(bmp); 

    imgView.setDrawingCacheEnabled(true); 
    imgView.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), 
      View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); 
    imgView.layout(0, 0, 
      imgView.getMeasuredWidth(), imgView.getMeasuredHeight()); 
    imgView.buildDrawingCache(true); 
    Bitmap bmap = Bitmap.createBitmap(imgView.getDrawingCache()); 
<!-- getting null from the method imgView.getDraingCache() only for the bigger size Images --> 
    imgView.setDrawingCacheEnabled(false); 
    return bmap; 
} 
+2

Posten Sie etwas von Ihrem Arbeitscode. Seien Sie spezifisch mit Ihrem Problem. –

Antwort

1

Was Sie konfrontiert sein müssen, ist begrenzt Android Ressourcen für Bildverarbeitungstechniken. Der beste Rat für Sie wäre, in Richtung NDK zu verschieben und Bildfilter in JNI mit OpenCV zu schreiben.

Dies ist die beste Option für schnellere Ergebnisse in HD-Bildern. Irgendwie muss es eine Grenze für die Auflösung geben, zu der ein Bild verarbeitet werden kann, da alle professionellen Apps ihre eigenen Randparameter erstellen.

+0

Danke für den Vorschlag. Aber die Sache ist, ich möchte nur das Bild auf externen Speicher speichern, nicht auf dem Bildschirm angezeigt werden. Wie kann es gemacht werden? –

+0

Warum erhalten Sie wieder die gleiche Bild-Bitmap, die Sie ursprünglich in ImageView gesetzt haben, warum geben Sie nicht einfach bmp zurück, d. H., Wenn es die richtige Bitmap ist, wie Sie es wünschen. –

+0

Ich habe 2 Bilder unterschiedlicher Größe, 1. Bild ist normales Bild mit niedrigeren Abmessungen, die dem Benutzer angezeigt wird, kann er zuschneiden, Filter anwenden, fames etc. Was auch immer die Auswirkungen auf das normale Bild, das gleiche sollte auf HD-Bild im Hintergrund angewendet werden (hier sehe ich das Problem). Also während ich Filter und Frames anwende, sehe ich das Problem (d. H., GetDrawingCache() gibt null zurück). –