2013-11-30 3 views
4

я пытаюсь получить байт [] из предварительного просмотра камеры, преобразовать его в растровое изображение и отображать его на ImageView с imageView.setImageBitmap()OnPreviewFrame данные изображения для ImageView

я уже успел запустите предварительный просмотр и отобразите его на поверхностном экране, но я не знаю, как преобразовать данные байта [] (которые входят в формат Yuv, я думаю) в растровое изображение RGB, чтобы отобразить его на изображении.

код, который я пытаюсь следующий:

camera = camera.open(); 
parameters = camera.getParameters(); 
camera.setParameters(parameters); 
surfaceHolder = surfaceView.getHolder(); 
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
camera.setPreviewDisplay(surfaceHolder); 
camera.setPreviewCallback(this); 
camera.startPreview(); 

и предварительный обратный вызов этого

@Override 
public void onPreviewFrame(byte[] data, Camera camera) { 

    Camera.Parameters parameters = camera.getParameters(); 
    int width = parameters.getPreviewSize().width; 
    int height = parameters.getPreviewSize().height; 
    ByteArrayOutputStream outstr = new ByteArrayOutputStream(); 
    Rect rect = new Rect(0, 0, width, height); 
    YuvImage yuvimage=new YuvImage(data,ImageFormat.NV21,width,height,null); 
    yuvimage.compressToJpeg(rect, 100, outstr); 
    Bitmap bmp = BitmapFactory.decodeByteArray(outstr.toByteArray(), 0, outstr.size()); 
    imgView1.setImageBitmap(bmp);   
} 

В окне предварительного просмотра работает, но ImageView остается пустым

Любая идея?

+0

где вы установили imageView.setImageBitmap (BMP); ? – Hardik

+0

После Bitmap bmp = BitmapFactory.decodeByteArray (outstr.toByteArray(), 0, outstr.size()); – Pitr

+0

убедитесь, что outstr.size()! = 0 !!? – Hardik

ответ

17

Возможно, вы не открыли камеру в потоке пользовательского интерфейса. Тем не менее, вы должны убедиться, setImageBitmap вызывается в потоке пользовательского интерфейса:

@Override 
public void onPreviewFrame(final byte[] data, Camera camera) { 
    Camera.Parameters parameters = camera.getParameters(); 
    int width = parameters.getPreviewSize().width; 
    int height = parameters.getPreviewSize().height; 

    YuvImage yuv = new YuvImage(data, parameters.getPreviewFormat(), width, height, null); 

    ByteArrayOutputStream out = new ByteArrayOutputStream(); 
    yuv.compressToJpeg(new Rect(0, 0, width, height), 50, out); 

    byte[] bytes = out.toByteArray(); 
    final Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); 

    MyActivity.this.runOnUiThread(new Runnable() { 

     @Override 
     public void run() { 
      ((ImageView) findViewById(R.id.loopback)).setImageBitmap(bitmap); 
     } 
    }); 
} 
+0

Эй, @Bla ... Я разрабатываю приложение CustomCaemra. У меня была та же проблема. Я также хочу, чтобы несколько камер просматривались в одно действие. [Как в GridView] .Пожалуйста, помогите мне. Как я могу достичь этого. Я уже задал вопрос, но никто не дал мне ответа .... Вот моя ссылка вопроса. ...... http: //stackoverflow.com/questions/41392791/how-to-apply-custom-filters-in-a-camera-surfaceview-preview –

+0

Я просмотрел его и попробовал больше учебников, библиотек [grafica too ]. Но я не добился этого типа Preview [Multiple Cmaera Preview]. я нашел больше проблем, как моя проблема в Stackoverflow.but же, как мой вопрос никто не дал answer.s.Пожалуйста, смотрите эту ссылку, я хочу этот вид View .... http: //i.stack.imgur.com/WYHuj.jpg –

+0

Спасибо заранее –