Как просматривать видео в реальном времени на видео, как Vigo Video Hypstar

Я хочу изменить верхний слой предварительного просмотра Surface с помощью gif или изображения Like Vigo

Как это

enter image description here

Скажите, пожалуйста, какой-нибудь sdk или что я использую для этого фильтра

Я могу изменить наложение на вид сверху, используя это

Помощь в этом

 PictureCallback cameraPictureCallbackJpeg = new PictureCallback() 
  {  
    @Override
    public void onPictureTaken(byte[] data, Camera camera) 
    {
      // TODO Auto-generated method stub   
      Bitmap cameraBitmap = BitmapFactory.decodeByteArray
                                                                  (data, 0, data.length);

   int   wid = cameraBitmap.getWidth();
     int  hgt = cameraBitmap.getHeight();

    //  Toast.makeText(getApplicationContext(), wid+""+hgt, Toast.LENGTH_SHORT).show();
      Bitmap newImage = Bitmap.createBitmap
                                        (wid, hgt, Bitmap.Config.ARGB_8888);

      Canvas canvas = new Canvas(newImage);

      canvas.drawBitmap(cameraBitmap, 0f, 0f, null);

     Drawable drawable = getResources().getDrawable
                                                          (R.drawable.mark3);
      drawable.setBounds(20, 30, drawable.getIntrinsicWidth()+20, drawable.getIntrinsicHeight()+30);
    drawable.draw(canvas);



      File storagePath = new File(Environment.
                    getExternalStorageDirectory() + "/PhotoAR/"); 
      storagePath.mkdirs(); 

      File myImage = new File(storagePath,
                    Long.toString(System.currentTimeMillis()) + ".jpg");

      try
      {
        FileOutputStream out = new FileOutputStream(myImage);
        newImage.compress(Bitmap.CompressFormat.JPEG, 80, out);


        out.flush();
        out.close();
      }
      catch(FileNotFoundException e)
      {
        Log.d("In Saving File", e + "");    
      }
      catch(IOException e)
      {
        Log.d("In Saving File", e + "");
      }

      camera.startPreview();



      newImage.recycle();
      newImage = null;

      Intent intent = new Intent();
      intent.setAction(Intent.ACTION_VIEW);

      intent.setDataAndType(Uri.parse("file://" + myImage.getAbsolutePath()), "image/*");
      startActivity(intent);

    }
  };

вывод этого

enter image description here

enter image description here

Ответы

Ответ 1

Используйте GLSurfaceView. Основная идея - предварительный просмотр камеры в GLSurfaceView и рисование рендеринга OpenGL.
Общий подход заключается в подклассе GLSurfaceView и реализует GLSurfaceView.Renderer. Задачи рендеринга выполняются путем реализации интерфейса.

public class CameraRenderer extends GLSurfaceView implements GLSurfaceView.Renderer, SurfaceTexture.OnFrameAvailableListener { 
    @Override
    public synchronized void onSurfaceCreated(GL10 gl, EGLConfig config) {
        ...
        //compile shader here
    }

    @Override
    public synchronized void onSurfaceChanged(GL10 gl, int width, int height) {
        ...
        //open camera and start preview here
    }

    @Override
    public synchronized void onDrawFrame(GL10 gl) {
        ...
        //draw frame as required
    }

}

Просмотрите этот проект grafika, чтобы получить лучшую идею и этот проект, который близок к тому, что вы пытаетесь сделать.

Ответ 2

Для этого вам нужно использовать внешние библиотеки.

для использования фильтров в камере и таких виртуальных эффектов.

Попробуйте эти библиотеки:

1) CameraFilter

2) Это основные фильтры.

Вы можете узнать, как реализовать эти базовые фильтры.

3) Эффект

Это такие эффекты, как Instagram.

3) Личные сообщения

Это такие эффекты, как Snapchat, но для этого вам нужно будет приобрести ключ для использования с этой страницы api.

Надеюсь, это поможет, если это не ваш ответ, пожалуйста, проигнорируйте этот ответ.