2015-08-25 18 views
7

Ho questa applicazione Android.disegna un android.media.Image a una superficie

Utilizzare un SurfaceView, da dove ottengo il numero Surface tramite il numero SurfaceHolder.

Utilizzare anche ExoPlayer per lo streaming di video. Tuttavia ho istanziato un ImageReader, ottenendo il suo Surface e passando allo ExoPlayer.

Ora, sono nello ImageReader.OnImageAvailableListener#onImageAvailable e accedo all'ultimo Image.

Voglio manipolare lo Image e inviare i nuovi dati a "SurfaceView" Surface.

Come è possibile "disegnare" un android.media.Image su un android.view.Surface?

+0

C'è codice galleggiando per convertire una 'Image' ottenuto da un' MediaProjection' (Android 5.0 e successivi schermata API) in un 'Bitmap', tenendo conto del passo. Quelli hanno solo un aereo, però. Presumo che ci sia una ricetta per fare lo stesso genere di cose per una YUV 'Immagine'. – CommonsWare

+0

Sei riuscito a farlo? – RohitMat

risposta

1

Possibile duplicato di: how to draw image on surfaceview android

prima ottenere la vostra tela utilizzando lockCanvas() (vedi here), secondo ottenere la vostra immagine e ne fanno un disegnabile utilizzando:

my_bitmap = Bitmap.createBitmap(
    MediaStore.Images.Media.getBitmap(getContentResolver(), uri), 
    0,0,90, 90); 
drawable=new BitmapDrawable(my_bitmap); 

Dopo di che è possibile disegnare drawable sulla tela bloccata e utilizzare unlockCanvasAndPost (Canvas canvas) per caricare nuovamente la tela aggiornata sulla vista superficiale.

+0

scusa, ma non capisco: come posso usare Bitmap.createBitmap per convertire un'istanza di android.media.Image? Non sto parlando di una risorsa immagine ... –

+0

Come hai ottenuto l'immagine multimediale? Dovrebbe avere un uri che punti ai dati reali. –

+0

Dai un'occhiata alla risposta qui http://stackoverflow.com/questions/26673127/android-imagereader-acquirelatestimage-returns-invalid-jpg è così che puoi estrarre la bitmap dall'oggetto dell'immagine. –

0

Questa è la risposta alla tua domanda.

MainActivity.java

public class MainActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mySurfaceView mySurfaceView = new mySurfaceView(getApplicationContext()); 
     setContentView(mySurfaceView); 
    } 
} 

mySurfaceView.java

public class mySurfaceView extends SurfaceView implements 
    SurfaceHolder.Callback { 

private TutorialThread _thread; 

public mySurfaceView(Context context) { 
    super(context); 
    getHolder().addCallback(this); 
    _thread = new TutorialThread(getHolder(), this); 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    Bitmap _scratch = BitmapFactory.decodeResource(getResources(), 
      R.drawable.icon); 
    canvas.drawColor(Color.BLACK); 
    canvas.drawBitmap(_scratch, 10, 10, null); 

} 

public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) { 
} 

public void surfaceCreated(SurfaceHolder arg0) { 
    _thread.setRunning(true); 
    _thread.start(); 
} 

public void surfaceDestroyed(SurfaceHolder arg0) { 
    boolean retry = true; 
    _thread.setRunning(false); 
    while (retry) { 
     try { 
      _thread.join(); 
      retry = false; 
     } catch (InterruptedException e) { 
     } 
    } 
} 

class TutorialThread extends Thread { 
    private SurfaceHolder _surfaceHolder; 
    private mySurfaceView _panel; 
    private boolean _run = false; 

    public TutorialThread(SurfaceHolder surfaceHolder, mySurfaceView panel) { 
     _surfaceHolder = surfaceHolder; 
     _panel = panel; 
    } 

    public void setRunning(boolean run) { 
     _run = run; 
    } 

    @Override 
    public void run() { 
     Canvas c; 
     while (_run) { 
      c = null; 
      try { 
       c = _surfaceHolder.lockCanvas(null); 
       synchronized (_surfaceHolder) { 
        _panel.onDraw(c); 
       } 
      } finally { 
       if (c != null) { 
        _surfaceHolder.unlockCanvasAndPost(c); 
       } 
      } 
     } 
    } 
} 
} 
+0

scusa ... COSA ?! –

+0

Riguardo a cosa ???? –