我已经构建了一个类似于vine app视频录制的模块。但我无法将视频大小设置为480x480像素。有没有办法做到这一点。感谢
答案 0 :(得分:1)
Android相机的相机可用尺寸列表有限。因此,我们需要选择最佳相机尺寸并从原始相机图像中选择子图像(480x480)。 例如,在我的HTC one m8上,我有相机尺寸:
您可以使用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);
}
答案 1 :(得分:0)
Android的视频捕捉分辨率仅限于相机支持的原始分辨率。
您可以尝试使用第三方库进行视频后期处理。因此,您可以裁剪或重新缩放相机拍摄的视频。
我正在使用这个
android-gpuimage-videorecording
并且效果很好。