2016-08-20 5 views
0

Ich baue eine Kamera-App ähnlich Barcode-Scanner im Bild gezeigt. Ich muss beide Camera und API verwenden, um android API> = 19.Android Crop-Kamera Bild

zu unterstützen Die Hauptidee ist, Kameravorschau auf dem ganzen Schirm zu haben, aber nur Teil zu speichern, der nicht verdunkelt wird (oder Aufnahme des Bereichs, dass ist nicht verdunkelt). Ich habe bereits einige Nachforschungen angestellt und herausgefunden, dass es unmöglich ist, nur einen Teil des Bildes durch Camera und APIs zu machen (aber ich bin mir nicht 100% sicher). Also denke ich, dass ich einige Manipulationen über das Byte-Array machen muss (komprimiert in JPEG), das ich als Ergebnis der Kameraerfassung erhalte.

Ich versuchte BitmapRegionDecoder auf diese Weise zu verwenden:

BitmapRegionDecoder decoder = BitmapRegionDecoder.newInstance(bytes, 0, bytes.length, false); 
Bitmap bitmap = decoder.decodeRegion(new Rect(500, 500, 1500, 1500), null); 
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, output); 

Wo bytes JPEG-komprimierte Ergebnis der Kameraerfassung. Aber dieser Ansatz ändert die Ausrichtung des Bildes und beschneidet keine Region, die durch Rect definiert ist (schneidet tatsächlich einen anderen Teil des Bildes).

Ich würde mich über Vorschläge und Hinweise freuen, wie man das gewünschte Verhalten erreicht.

enter image description here

+0

Haben Sie das zur Arbeit gebracht? – Carpetfizz

Antwort

0

Es ist eine Weile her, aber die Leute interessiert noch in dieser Frage. Deshalb teile ich, wie ich dieses Problem gelöst habe.

  • Ich speichere das vollständige Bild von einer Kamera als .jpg.
  • Dann bekomme ich Drehwinkel von JPG-Datei. Das Problem des Beschneidens unterschiedlicher Regionen bestand darin, dass jedes Bild einen Drehwinkel hat, den ich von ExifInterface
  • bekommen konnte. Skalieren Sie den Ausschnittsbereich (helles Rechteck vor der Kamera) auf gespeicherte Bildabmessungen.
  • Drehen Sie die Erntematerialregion für einen Winkel, der zuvor erhalten wurde.