title: Converting preview frame to bitmap
body: <p>I know the subject was on the board many times, but i can not get it work anyhow...
  I want to save view frames from preview to jpeg files. It looks more or less(code is simplified- without additional logic, exception etc) like this...</p>
  
  <pre><code>public void onPreviewFrame(byte[] data, Camera camera) {
    int width = camera.getParameters().getPreviewSize().width;
    int height = camera.getParameters().getPreviewSize().height;
  
  
    final int[] rgb = decodeYUV420SP(data, width, height);
  
    Bitmap bmp = Bitmap.createBitmap(rgb, width, height,Bitmap.Config.ARGB_8888);
  
    String filename="/sdcard/file" + (index++)+ ".jpg"; 
    FileOutputStream out;
    out = new FileOutputStream(filename);
    bmp.compress(Bitmap.CompressFormat.JPEG, 90, out);
    out.flush();
    out.close();
    out=null;
  
   }
  </code></pre>
  
  <p>Here is the one of the methods i tried to convert colors(from this board i believe)</p>
  
  <pre><code>public int[] decodeYUV420SP( byte[] yuv420sp, int width, int height) {   
  
      final int frameSize = width * height;   
  
      int rgb[]=new int[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);   
  
  
          }   
      }   
      return rgb;   
      } 
  </code></pre>
  
  <p>The problem is that the picture always looks like three 'strange green pictures'...
  I ama new user so i can't post it:(</p>
  
  <p>I dont know if it has something to do with the size or what but i am stuck...
  Can you support me with it?</p>