700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > android camera surfaceview 变形 使用Camera预览显示变形问题

android camera surfaceview 变形 使用Camera预览显示变形问题

时间:2022-01-22 01:06:54

相关推荐

android camera surfaceview 变形 使用Camera预览显示变形问题

本人使用Camera显示预览图竖屏显示会有一些拉伸。感觉被拉长了。

本人已经选择了最接近的比例了,但是还是有拉伸。

packagecom.example.zxing_android;

importjava.io.IOException;

importjava.util.List;

importcom.example.zxing_android.R.color;

importandroid.app.Activity;

importandroid.hardware.Camera;

importandroid.hardware.Camera.Size;

importandroid.os.Bundle;

importandroid.util.Log;

importandroid.view.SurfaceHolder;

importandroid.view.SurfaceHolder.Callback;

importandroid.view.SurfaceView;

importandroid.view.View;

importandroid.view.View.OnClickListener;

importandroid.widget.Button;

importandroid.widget.LinearLayout.LayoutParams;

/**

*/

publicclassCameraActivityextendsActivity{

SurfaceViewmSurface;

SurfaceHoldermSurfaceHolder;

CameramCamera;

booleanisInit;

Buttonbtn;

//intviewWidth,viewHeight;

@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_camera);

mSurface=(SurfaceView)findViewById(R.id.camera);

btn=(Button)findViewById(R.id.btn);

btn.setOnClickListener(newOnClickListener(){

@Override

publicvoidonClick(Viewv){

mCamera.autoFocus(null);//自动对焦

}

});

mSurfaceHolder=mSurface.getHolder();//getthecameraholder

mSurfaceHolder.addCallback(newCallback(){

@Override

publicvoidsurfaceCreated(SurfaceHolderarg0){

mCamera=Camera.open();//opencamera

isInit=false;

try{

mCamera.setPreviewDisplay(mSurfaceHolder);//setthe//

}catch(IOExceptione){

e.printStackTrace();

if(mCamera!=null){

mCamera.release();

mCamera=null;

}

}

mCamera.startPreview();//statepreview

}

@Override

publicvoidsurfaceDestroyed(SurfaceHolderarg0){

//mSurface.setLayoutParams(newLayoutParams(viewWidth,

//viewHeight));

mCamera.setPreviewCallback(null);//!这个必须在前,不然退出出错

mCamera.stopPreview();

mCamera.release();

mCamera=null;

}

@Override

publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,intheight){

initCamera(width,height);

}

});

}

privatevoidinitCamera(intwidth,intheight){

if(!isInit){

//viewWidth=width;

//viewHeight=height;

isInit=true;

mCamera.autoFocus(null);

Camera.Parametersparameters=mCamera.getParameters();

//摄像头旋转

//if(android.os.Build.VERSION_CODES.GINGERBREAD>

//android.os.Build.VERSION.SDK_INT){

mCamera.setDisplayOrientation(90);

//}else{

//parameters.set("rotation",180);

//}

ListpreviewSizes=mCamera.getParameters().getSupportedPreviewSizes();

doubleaspectTolerance=Double.MAX_VALUE;

intpreWidth=0,preHeight=0;

doublescale=((double)width)/height;

for(inti=0,len=previewSizes.size();i

Sizes=previewSizes.get(i);

doublesizeScale=((double)s.height)/s.width;

if(Math.abs(scale-sizeScale)

aspectTolerance=Math.abs(scale-sizeScale);

preWidth=s.height;

preHeight=s.width;

}

}

if(preWidth!=0){

parameters.setPreviewSize(preWidth,preHeight);

//mSurface.setLayoutParams(newLayoutParams(720,1280));

Sizes=parameters.getPreviewSize();

Log.e("",s.width+""+s.height);

}

}

}

}

解决方案

10

输出下getSupportedPreviewSizes的全部值。例如1080*720

假如你竖屏是用整个手机屏幕显示预览,那么手机的长宽比例和预览返回的相差太多了。拉伸应该是不可避免。

不想拉伸的话就缩小屏幕显示的范围吧。

90

引用:

应该先设置预览参数再打开预览图。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明使用Camera预览显示变形问题!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。