Android 在安卓系统中录制480*480像素大小的视频?
我构建了一个类似于vine应用程序视频录制的模块。但我无法将视频大小设置为480x480像素。有没有办法做到这一点。感谢android的视频捕获分辨率仅限于相机支持的本机分辨率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
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上,我的相机有以下尺寸:
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年了:)对不起,朋友们,我没有关于这个问题的任何代码。我为我的一个项目问了这个问题,但这个问题从未发生过,因为当时我无法找到最佳解决方案。