Android 在安卓系统中录制480*480像素大小的视频?

Android 在安卓系统中录制480*480像素大小的视频?,android,video-capture,vine,Android,Video Capture,Vine,我构建了一个类似于vine应用程序视频录制的模块。但我无法将视频大小设置为480x480像素。有没有办法做到这一点。感谢android的视频捕获分辨率仅限于相机支持的本机分辨率 Camera.Size findBestCameraSize(int width, int height){ Camera.Size bestSize = cameraSizes.get(0); int minimalArea = bestSize.height * bestSize.width; for(i

我构建了一个类似于vine应用程序视频录制的模块。但我无法将视频大小设置为480x480像素。有没有办法做到这一点。感谢

android的视频捕获分辨率仅限于相机支持的本机分辨率

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
  }
  };    
您可以尝试使用第三方库进行视频后期处理。因此,您可以裁剪或重新缩放相机捕获的视频

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
  }
  };    
我正在用这个


Android摄像头的可用尺寸列表非常有限。因此,我们需要选择最佳相机尺寸,并从原始相机图像中选择子图像(480x480)。 例如,在我的HTC one m8上,我的相机有以下尺寸:

  • 1920x1088
  • 1920x1080
  • 1808x1080
  • 720x480
  • 640x360
  • 640x480
  • 576x432
  • 480x320
  • 384x288
  • 352x288
  • 320x240
  • 240x160
  • 176x144
  • 您可以使用方法检索可用大小的列表

    mCamera公共摄像机//你的相机实例
    公开名单;
    专用最终int摄像机\图像\宽度=480;
    私人最终int摄像机\图像\高度=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
      }
      };    
    
    Camera.Size findBestCameraSize(int-width,int-height){
    Camera.Size bestSize=cameraSizes.get(0);
    int minimalArea=bestSize.height*bestSize.width;
    对于(int i=1;i
    设置相机大小后,我们需要从相机的结果位图中获取子图像。您需要将此代码放在接收位图图片的位置(通常我使用OpenCV库和矩阵以获得更好的性能)

    Bitmap imageFromCamera=//这里我们从摄像机接收图像。
    Camera.Size Size=mCamera.getParameters().getPreviewSize();
    intx=(size.width-摄像机图像宽度)/2;
    int y=(size.height-摄像机图像高度)/2;
    位图resultBitmap=null;
    if(x<0 | | y<0){
    resultBitmap=来自照相机的图像;
    }否则{
    resultBitmap=Bitmap.createBitmap(imageFromCamera,x,y,CAMERA\u IMAGE\u WIDTH,CAMERA\u IMAGE\u HEIGHT);
    }
    
    您使用什么进行录制?告诉我们你到目前为止都做了些什么请发布一些代码14年2月4日被问到的问题-看来你已经苦苦寻找答案将近4年了:)对不起,朋友们,我没有关于这个问题的任何代码。我为我的一个项目问了这个问题,但这个问题从未发生过,因为当时我无法找到最佳解决方案。