Записать видео размером 480 * 480 px в android?
Я построил модуль, похожий на запись видео в приложении Vine. Но я не могу сделать видео размером до 480х480 пикселей. Есть ли способ сделать это. Спасибо
2 ответа
Камера Android имеет ограниченный список доступных размеров для камеры. Поэтому нам нужно выбрать лучший размер камеры и выбрать вспомогательное изображение (480x480) из исходного изображения камеры. Например на моем HTC One M8 у меня есть эти размеры для камеры:
- 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);
}
Разрешение захвата видео для Android ограничено исходным разрешением, поддерживаемым камерой.
Вы можете попробовать использовать стороннюю библиотеку для постобработки видео. Таким образом, вы можете обрезать или масштабировать видео, снятое камерой.
Я использую этот
и это работает довольно хорошо.