本人使用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预览显示变形问题!