Android,我的应用程序中的摄像头是旋转的
我在我的应用程序中打开摄像头,即使在我手中旋转设备时,摄像头显示屏也会一直旋转90度 守则:Android,我的应用程序中的摄像头是旋转的,android,Android,我在我的应用程序中打开摄像头,即使在我手中旋转设备时,摄像头显示屏也会一直旋转90度 守则: import java.io.IOException; import java.util.List; import android.content.Context; import android.hardware.Camera; import android.view.Display; import android.view.Surface; import android.view.Surfac
import java.io.IOException;
import java.util.List;
import android.content.Context;
import android.hardware.Camera;
import android.view.Display;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.WindowManager;
public class CameraSurfaceView extends SurfaceView implements SurfaceHolder.Callback
{
private SurfaceHolder holder;
private Camera camera;
private Context context;
public CameraSurfaceView(Context context)
{
super(context);
//Initiate the Surface Holder properly
this.holder = this.getHolder();
this.holder.addCallback(this);
this.holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
this.context = context;
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// Now that the size is known, set up the camera parameters and begin
// the preview.
Camera.Parameters parameters = camera.getParameters();
List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes();
Camera.Size size = previewSizes.get(0);
parameters.setPreviewSize(size.width, size.height);
Display display = ((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
if(display.getOrientation() == Surface.ROTATION_0)
{
//parameters.setPreviewSize(height, width);
parameters.setRotation(90);
}
if(display.getOrientation() == Surface.ROTATION_90)
{
//parameters.setPreviewSize(width, height);
}
if(display.getOrientation() == Surface.ROTATION_180)
{
//parameters.setPreviewSize(height, width);
}
if(display.getOrientation() == Surface.ROTATION_270)
{
//parameters.setPreviewSize(width, height);
parameters.setRotation(180);
}
camera.setParameters(parameters);
camera.startPreview();
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try
{
//Open the Camera in preview mode
this.camera = Camera.open();
this.camera.setPreviewDisplay(this.holder);
}
catch(IOException ioe)
{
ioe.printStackTrace(System.out);
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// Surface will be destroyed when replaced with a new screen
//Always make sure to release the Camera instance
camera.stopPreview();
camera.release();
camera = null;
}
}
import java.io.IOException;
导入java.util.List;
导入android.content.Context;
导入android.hardware.Camera;
导入android.view.Display;
导入android.view.Surface;
导入android.view.SurfaceHolder;
导入android.view.SurfaceView;
导入android.view.WindowManager;
公共类CameraSurfaceView扩展了SurfaceView,实现了SurfaceHolder.Callback
{
私人土地持有人;
私人摄像机;
私人语境;
公共CameraSurfaceView(上下文)
{
超级(上下文);
//正确启动表面支架
this.holder=this.getHolder();
this.holder.addCallback(this);
这个.holder.setType(SurfaceHolder.SURFACE\u TYPE\u PUSH\u BUFFERS);
this.context=上下文;
}
@凌驾
公共无效表面更改(表面文件夹持有者,整型格式,整型宽度,
整数高度){
//现在已经知道大小,请设置相机参数并开始
//预览。
Camera.Parameters=Camera.getParameters();
List previewSizes=参数。getSupportedPreviewSizes();
Camera.Size Size=previewSizes.get(0);
parameters.setPreviewSize(size.width、size.height);
Display Display=((WindowManager)context.getSystemService(context.WINDOW_SERVICE)).getDefaultDisplay();
if(display.getOrientation()==Surface.ROTATION\u 0)
{
//参数.setPreviewSize(高度、宽度);
参数设置旋转(90);
}
if(display.getOrientation()==Surface.ROTATION_90)
{
//参数。setPreviewSize(宽度、高度);
}
if(display.getOrientation()==Surface.ROTATION_180)
{
//参数.setPreviewSize(高度、宽度);
}
if(display.getOrientation()==Surface.ROTATION_270)
{
//参数。setPreviewSize(宽度、高度);
参数设置旋转(180);
}
设置参数(参数);
camera.startPreview();
}
@凌驾
已创建的公共空白表面(表面持有人){
尝试
{
//在预览模式下打开相机
this.camera=camera.open();
this.camera.setPreviewDisplay(this.holder);
}
捕获(ioe异常ioe)
{
ioe.printStackTrace(系统输出);
}
}
@凌驾
公共空间表面覆盖(表面覆盖物持有人){
//更换新滤网时,表面将被破坏
//始终确保释放摄影机实例
camera.stopPreview();
相机。释放();
摄像机=零;
}
}
有什么想法吗?谢谢
p、 s我如何知道我的设备在生产线上的正确选择是什么
List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes();
List previewSizes=parameters.getSupportedPreviewSizes();
查看方法参考中给出的示例代码。请注意,在调用setPreviewDisplay(SurfaceHolder)
之前,应该执行这些操作。请查看方法参考中给出的示例代码。请注意,在调用setPreviewDisplay(SurfaceHolder)
之前,您应该执行这些操作。当我希望正确显示相机预览时,我使用了此代码
Camera.Parameters parameters = camera.getParameters();
parameters.set("jpeg-quality", 100);
parameters.set("orientation", "landscape");
parameters.set("rotation", 90);
parameters.setPictureFormat(PixelFormat.JPEG);
parameters.setPreviewSize(w, h);
camera.setParameters(parameters);
当我想正确显示相机预览时,我使用了这段代码
Camera.Parameters parameters = camera.getParameters();
parameters.set("jpeg-quality", 100);
parameters.set("orientation", "landscape");
parameters.set("rotation", 90);
parameters.setPictureFormat(PixelFormat.JPEG);
parameters.setPreviewSize(w, h);
camera.setParameters(parameters);
这是一个基于某些手机硬件设置的错误。由于Android是硬件,所以无法对其进行修补。你只需要在代码中旋转图像。这是一个基于某些手机硬件设置的错误。由于Android是硬件,所以无法对其进行修补。您只需在代码中旋转图像。尝试使用
Camera.setDisplayOrientation(degrees)
而不是Camera.Parameters.setRotation(degrees)
尝试使用Camera.setDisplayOrientation(degrees)
而不是Camera.Parameters.setRotation(degrees)