Подтвердить что ты не робот

Запись видео с размером 480 * 480 пикселей в android?

Я построил модуль, похожий на видеозапись приложения для видеомонтажа. Но я не могу сделать размер видео до 480x480 px. Есть ли способ сделать это. Благодаря

4b9b3361

Ответ 1

Камера Android имеет ограниченный список доступных размеров для камеры. Поэтому нам нужно выбрать лучший размер камеры и выбрать суб изображение (480x480) с исходного изображения камеры. Например, на моем HTC один м8 у меня такие размеры для камеры:

  • 1920x1088
  • 1920x1080
  • 1808x1080
  • ....
  • 720x480
  • 640x360
  • 640х480
  • 576x432
  • 480x320
  • 384x288
  • 352x288
  • 320x240
  • 240x160
  • 176x144

Вы можете получить список доступных размеров с помощью getSupportedPreviewSizes().

public Camera mCamera;//Your camera instance
public List<Camera.Size> cameraSizes;
private final int CAMERA_IMAGE_WIDTH = 480;
private final int CAMERA_IMAGE_HEIGHT = 480;
...

cameraSizes = mCamera.getParameters().getSupportedPreviewSizes()

После этого вам нужно найти наиболее подходящий размер камеры и задать размер предварительного просмотра для камеры.

Camera.Size findBestCameraSize(int width, int height){
  Camera.Size bestSize = cameraSizes.get(0);
  int minimalArea = bestSize.height * bestSize.width;
  for(int i = 1;i < cameraSizes.size();i++){
    Camera.Size size = cameraSizes.get(i);

    int area = size.height * size.width;
    if(size.width < width || size.height < height){
      continue;
    }

    if(area < minimalArea){
      bestSize = size;
      minimalArea = area;
    }
  }
  return bestSize;
}

...
SurfaceHolder.Callback surfaceCallback = new SurfaceHolder.Callback() {
  public void surfaceCreated(SurfaceHolder holder) {
    //Do something
  }

  public void surfaceChanged(SurfaceHolder holder,
                             int format, int width,
                             int height) {
    Camera.Parameters params = mCamera.getParameters();
    Camera.Size size = findBestCameraSize(CAMERA_IMAGE_WIDTH, CAMERA_IMAGE_HEIGHT);
    params.setPreviewSize(size.width, size.height);
    camera.setParameters(params);
    if(mCamera != null){
      mCamera.startPreview();
    }
  }

  public void surfaceDestroyed(SurfaceHolder holder) {
    // Do something
  }
  };    

После настройки размера камеры нам нужно получить вспомогательное изображение из растрового изображения результата с камеры. Вам нужно поместить этот код, где вы получите растровое изображение (обычно я использую библиотеку OpenCV и матрицы для лучшей производительности).

Bitmap imageFromCamera = //here ve receive image from camera.
Camera.Size size = mCamera.getParameters().getPreviewSize();
int x = (size.width - CAMERA_IMAGE_WIDTH)/2;
int y = (size.height - CAMERA_IMAGE_HEIGHT)/2;
Bitmap resultBitmap = null;
if(x < 0 || y < 0){
   resultBitmap = imageFromCamera;
}else{
   resultBitmap = Bitmap.createBitmap(imageFromCamera, x, y, CAMERA_IMAGE_WIDTH, CAMERA_IMAGE_HEIGHT);
}

Ответ 2

Разрешение видеозахвата для андроида ограничено собственными разрешениями, поддерживаемыми камерой.

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

Я использую этот

android-gpuimage-videorecording

и он работает достаточно хорошо.