gpt4 book ai didi

android - 无失真/拉伸(stretch)的全屏相机预览

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:13:22 31 4
gpt4 key购买 nike

我有一个正在启动全屏和横向的 cameraPreview 类(见下文)...但是图像正在拉伸(stretch)/扭曲..有没有办法让这个预览保持全屏但不扭曲?

凸轮层:

public class CamLayer extends SurfaceView implements SurfaceHolder.Callback {
Camera camera;
SurfaceHolder previewHolder;
String camID;
private static final String TAG = "Cam Preview";


public CamLayer(Context context, String facing)
{
super(context);
camID = facing;
previewHolder = this.getHolder();
previewHolder.addCallback(this);
previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);


}
public void surfaceCreated(SurfaceHolder holder) {
startCamera();
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
{
Parameters params = camera.getParameters();
//params.setPreviewSize(width, height);
//params.setPictureFormat(PixelFormat.JPEG);
camera.setParameters(params);
camera.startPreview();


}

public void surfaceDestroyed(SurfaceHolder arg0)
{

stopCamera();
}



public void onResume() {

startCamera();

}

public void onPause() {

stopCamera();
}


public void stopCamera(){
System.out.println("stopCamera method");
if (camera != null){
camera.stopPreview();
camera.setPreviewCallback(null);
camera.release();
camera = null;
previewHolder.removeCallback(this);
previewHolder = null;
}
}

private void startCamera(){
if(camID.equals("front")){
camera=Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT);
}else{
camera=Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);
}
try {
camera.setPreviewDisplay(previewHolder);

}
catch (Throwable e){ Log.w("TAG,", "failed create surface !?!?"); }
}

public void draw(Canvas canvas) {
super.draw(canvas);
Paint p = new Paint(Color.RED);
Log.d(TAG, "draw");
canvas.drawText("PREVIEW", canvas.getWidth() / 2,
canvas.getHeight() / 2, p);
}
}

最佳答案

您需要运行 params.getSupportedPreviewSizes();

然后从中找到适合您 View 的最佳预览大小

看看这个项目:https://github.com/commonsguy/cw-advandroid/blob/master/Camera/Picture/src/com/commonsware/android/picture/PictureDemo.java

  private Camera.Size getBestPreviewSize(int width, int height,
Camera.Parameters parameters) {
Camera.Size result=null;

for (Camera.Size size : parameters.getSupportedPreviewSizes()) {
if (size.width <= width && size.height <= height) {
if (result == null) {
result=size;
}
else {
int resultArea=result.width * result.height;
int newArea=size.width * size.height;

if (newArea > resultArea) {
result=size;
}
}
}
}

return(result);
}

关于android - 无失真/拉伸(stretch)的全屏相机预览,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9915699/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com