2010-01-11 3 views
5

Ich schreibe eine Anwendung für Android. Ich muss einige Bildbearbeitung auf dem Bild von der Kamera gemacht. Ich benutze Camera.PictureCallback, um das Foto zu bekommen, und ich bekomme Bild in Byte-Array. Das Problem ist, ich möchte Operationen auf jedem Pixel des Fotos (einige Filterung und andere Sachen) machen, so denke ich, haben Foto in Byte-Array ist keine schlechte Idee. Aber ich weiß nicht, wie Informationen in diesem Byte-Array interpretiert werden ... Die einzige Art, die ich kenne, um die Verarbeitung zu machen, ist die Verwendung von BitmapFactory.decodeByteArray() und dann die Verwendung eines Bitmap-Objekts. Ist das ein guter Weg, viel Bildbearbeitung zu erledigen? Im Moment benutze ich etwas wie folgt aussehen:Bildverarbeitung auf Android

Bitmap mPhotoPicture mPhotoPicture = BitmapFactory.decodeByteArray (imagedata, 0, imageData.length);

mPhotoPicture = mPhotoPicture.copy (Bitmap.Config.RGB_565, true);

Ich schätze jede Hilfe.

Antwort

7

Ich bin nicht sicher, ob die Dekodierung in ein Byte-Array der beste Weg ist, um es auf Android zu tun, aber ich kann bieten, was ich über Bildverarbeitung im Allgemeinen weiß. Wenn Sie RGB_565 verwenden, bedeutet das, dass jedes Pixel 16 Bits oder zwei dieser Bytes ist. Die ersten 5 Bits sind rot, die nächsten 6 sind grün und die letzten 5 sind blau. Der Umgang damit ist in Java haarig. Ich schlage vor, dass Sie mit einem einfacheren Format wie ARGB_8888 arbeiten, was bedeutet, dass Sie 32 Bits oder vier Bytes pro Pixel haben und jedes Byte seinen eigenen Wert hat (Alpha, Rot, Grün, Blau).

Um zu testen, versuchen, jedes vierte Byte, wie [3], [7], [11] usw. auf 0 setzen, dass alle einen bestimmten Kanal, in diesem Fall herausnehmen sollte, alle blau.

[2], [6], [10] usw. würden alle grünen Werte für jedes Pixel sein.

(Hinweis, könnten die vier Komponenten in umgekehrter Reihenfolge gehen, weil ich über endianness bin nicht sicher! Also ich könnte nur Sie gesagt haben, wie die Alpha nehmen, nicht die blaue ...)

+0

Vielen Dank für diese nützliche Informationen. Jetzt weiß ich aus Dokumentationen, dass ich Bilder nur in diesen Formaten aufnehmen kann: PixelFormat.YCbCr_420_SP (NV21), PixelFormat.RGB_565, oder PixelFormat.JPEG Also ich schätze, ich versuche RGB_565 zu kodieren. – Kubeczek

+0

Rechts. Bearbeiten Sie entweder in diesem Format oder suchen Sie vor der Bearbeitung nach einer Möglichkeit zum Konvertieren. –