Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>When you set-up the camera you will need to set the preview size and the preview format. Here is some sample code to give the rough idea:</p> <pre><code>int previewFormat = 0; for (int format : parameters.getSupportedPreviewFormats()) { if (format == FORMAT_NV21) { previewFormat = FORMAT_NV21; } else if (previewFormat == 0 &amp;&amp; (format == FORMAT_JPEG || format == FORMAT_RGB_565)) { previewFormat = format; } } // TODO: Iterate on supported preview sizes and pick best one parameters.setPreviewSize(previewSize.width, previewSize.height); if (previewFormat != 0) { parameters.setPreviewFormat(previewFormat); } else { // Error on unsupported format } </code></pre> <p>Now in the callback you can do something like:</p> <pre><code>@Override public void onPreviewFrame(byte[] data, Camera camera) { Bitmnap bitmap; if (previewFormat == FORMAT_NV21) { int[] previewPixels = new int[previewSize.width * previewSize.height]; decodeYUV420SP(previewPixels, data, previewSize.width, previewSize.height); bitmap = Bitmap.createBitmap(rgbPixels, previewSize.width, previewSize.height, Bitmap.Config.RGB_565); } else if (previewFormat == FORMAT_JPEG || previewFormat == FORMAT_RGB_565) { // RGB565 and JPEG BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inDither = true; opts.inPreferredConfig = Bitmap.Config.RGB_565; bitmap = BitmapFactory.decodeByteArray(data, 0, data.length, opts); } } </code></pre> <p>And finally, the conversion</p> <pre><code> static void decodeYUV420SP(int[] rgb, byte[] yuv420sp, int width, int height) { final int frameSize = width * height; for (int j = 0, yp = 0; j &lt; height; j++) { int uvp = frameSize + (j &gt;&gt; 1) * width, u = 0, v = 0; for (int i = 0; i &lt; width; i++, yp++) { int y = (0xff &amp; ((int) yuv420sp[yp])) - 16; if (y &lt; 0) y = 0; if ((i &amp; 1) == 0) { v = (0xff &amp; yuv420sp[uvp++]) - 128; u = (0xff &amp; yuv420sp[uvp++]) - 128; } int y1192 = 1192 * y; int r = (y1192 + 1634 * v); int g = (y1192 - 833 * v - 400 * u); int b = (y1192 + 2066 * u); if (r &lt; 0) r = 0; else if (r &gt; 262143) r = 262143; if (g &lt; 0) g = 0; else if (g &gt; 262143) g = 262143; if (b &lt; 0) b = 0; else if (b &gt; 262143) b = 262143; rgb[yp] = 0xff000000 | ((r &lt;&lt; 6) &amp; 0xff0000) | ((g &gt;&gt; 2) &amp; 0xff00) | ((b &gt;&gt; 10) &amp; 0xff); } } } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload