Android 新手相机方向

2024-02-12

我正在使用相机工作面临相机方向问题。我在互联网上找到了一些答案,我认为这个答案可能最适合我。

谁能给我详细的指导吗如何添加这个答案 https://stackoverflow.com/questions/3841122/android-camera-preview-is-sideways/5110406#5110406在我的相机项目中。?

这是我的完整的相机项目代码。 http://www.mediafire.com/?8ht63xpteih0as3

直接代码在这里

public class AndroidCamera extends Activity implements SurfaceHolder.Callback{

 Camera camera;
 SurfaceView surfaceView;
 SurfaceHolder surfaceHolder;
 boolean previewing = false;
 LayoutInflater controlInflater = null;

 Button buttonTakePicture;



 final int RESULT_SAVEIMAGE = 0;

   /** Called when the activity is first created. */
   @SuppressWarnings("deprecation")
@Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);


       getWindow().setFormat(PixelFormat.UNKNOWN);
       surfaceView = (SurfaceView)findViewById(R.id.camerapreview);
       surfaceHolder = surfaceView.getHolder();
       surfaceHolder.addCallback(this);
       surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);


       controlInflater = LayoutInflater.from(getBaseContext());
       View viewControl = controlInflater.inflate(R.layout.control, null);
       LayoutParams layoutParamsControl
        = new LayoutParams(LayoutParams.FILL_PARENT,
        LayoutParams.FILL_PARENT);
       this.addContentView(viewControl, layoutParamsControl);


       buttonTakePicture = (Button)findViewById(R.id.takepicture);
       buttonTakePicture.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View arg0) {
    // TODO Auto-generated method stub
    camera.takePicture(myShutterCallback,
      myPictureCallback_RAW, myPictureCallback_JPG);
   }});

       LinearLayout layoutBackground = (LinearLayout)findViewById(R.id.background);
       layoutBackground.setOnClickListener(new LinearLayout.OnClickListener(){


   @Override
   public void onClick(View arg0) {
    // TODO Auto-generated method stub

    buttonTakePicture.setEnabled(false);
    camera.autoFocus(myAutoFocusCallback);
   }});
   }

   AutoFocusCallback myAutoFocusCallback = new AutoFocusCallback(){

  @Override
  public void onAutoFocus(boolean arg0, Camera arg1) {
   // TODO Auto-generated method stub
   buttonTakePicture.setEnabled(true);
  }};

   ShutterCallback myShutterCallback = new ShutterCallback(){

  @Override
  public void onShutter() {
   // TODO Auto-generated method stub

  }};

 PictureCallback myPictureCallback_RAW = new PictureCallback(){

  @Override
  public void onPictureTaken(byte[] arg0, Camera arg1) {
   // TODO Auto-generated method stub

  }};

 PictureCallback myPictureCallback_JPG = new PictureCallback(){

  @Override
  public void onPictureTaken(byte[] arg0, Camera arg1) {
   // TODO Auto-generated method stub
   /*Bitmap bitmapPicture
    = BitmapFactory.decodeByteArray(arg0, 0, arg0.length); */

   Uri uriTarget = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, new ContentValues());

   OutputStream imageFileOS;
   try {
    imageFileOS = getContentResolver().openOutputStream(uriTarget);
    imageFileOS.write(arg0);
    imageFileOS.flush();
    imageFileOS.close();

    Toast.makeText(AndroidCamera.this,
      "Image saved",
      Toast.LENGTH_SHORT).show();

   } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }

   camera.startPreview();
  }};

 @Override
 public void surfaceChanged(SurfaceHolder holder, int format, int width,
   int height) {
  // TODO Auto-generated method stub
  if(previewing){
   camera.stopPreview();
   previewing = false;
  }

  if (camera != null){
   try {
    camera.setPreviewDisplay(surfaceHolder);  
    camera.startPreview();
    previewing = true;
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
 }



 @Override
 public void surfaceCreated(SurfaceHolder holder) {
  // TODO Auto-generated method stub
  camera = Camera.open();
 }

 @Override
 public void surfaceDestroyed(SurfaceHolder holder) {
  // TODO Auto-generated method stub
  camera.stopPreview();
  camera.release();
  camera = null;
  previewing = false;
 }
}

为了修复你的相机方向改变了你的surfaceCreated函数将相机从默认的 Android 相机默认横向模式旋转为纵向模式(因为您的 Activity 处于纵向模式):

@Override
public void surfaceCreated(SurfaceHolder holder) {
   camera = Camera.open();
   Parameters parameters = camera.getParameters();
   camera.setDisplayOrientation(90);
   camera.setParameters(parameters);
}

当您尝试拍照时,您的应用程序也会崩溃...但这不是当前的问题...尽管这可能与您需要将以下行添加到清单中有关:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 新手相机方向 的相关文章

随机推荐

  • KineticJS 撤消图层:撤消时图层不会消失?

    我在 Canvas HTML5 中的设计器绘图工具上遇到了一个特定问题 我正在开发一个动作历史系统 撤消和重做 我正在构建我的系统projeqht的回答这个问题 https stackoverflow com questions 16096
  • React Hooks 上的 useState 不更新数组

    我已经尝试了很多方法 但似乎无法理解为什么 setTypes 不会更新 类型 数组 import useState useEffect from react import PostList from post list import as
  • 在 cassandra 中创建表时出错 - 错误请求:只能在 CLUSTERING ORDER 指令中定义集群键列

    当我尝试使用以下 cql 语句时出现上述错误 不确定它出了什么问题 CREATE TABLE Stocks id uuid market text symbol text value text time timestamp PRIMARY
  • glGenFramebuffers 还是 glGenFramebuffersEXT?

    我很困惑 要在 Windows 上的 OpenGL 1 x 中使用帧缓冲区对象扩展 FBO 我应使用以下哪一个 wglGetProcAddress glGenFramebuffers or wglGetProcAddress glGenFr
  • 将从 Promise 返回的值分配给全局变量

    我正在尝试从量角器读取浏览器内存值并将它们存储在全局对象中 为此 我获取 window performance memory 对象 然后解决检查每个内存值的承诺 问题是我似乎无法将值分配给全局变量 我尝试过以下代码 但似乎效果不太好 thi
  • 如果绑定,Bootstrap CSS table-striped 不适用于剔除

    假设我有下表适用于 bootstrap css 和淘汰赛 table class table table striped table bordered table hover table condensed tbody tr td td t
  • Python:“”未定义

    这是我的代码 This program makes the robot calculate the average amount of light in a simulated room from myro import init simu
  • 为什么FunctionN(0-22) ProductN(1-22) TupleN(1-22)?

    该 API 有 FunctionN 0 22 ProductN 1 22 TupleN 1 22 问题是 1 为什么数字是22结尾 为什么不是21或23 2 为什么函数以0开头 但 Product 和 Tuple 不是吗 拥有一个没有意义P
  • 防止 标记中自动换行

    我有一个htmlcode标签 包裹在pre具有固定宽度的标签 并且自动换行变得难看 我想要实现的是 文本不会自动在空格上断开 但是当我添加white space nowrap to the code元素 整个内容折叠成一行 因此所有 n 和
  • PyQt4:如何迭代 QListWidget 中的所有项目

    目前 我在继承 QtGui QListWidget 的类中使用以下 while 循环来迭代所有项目 i 0 while i lt self count item self item i i 1 我希望我可以使用 for item in se
  • OllyDbg 无法调试 Visual Studio exe

    我刚刚使用以下简单代码创建了一个新的 vc exe include
  • 如何在 SSMS 单元格中输入“NULL”?

    在 SQL Server Management Studio 2012 中 我将数据键入 粘贴到表中 通过编辑前 200 行 每当我输入 粘贴时NULL在一个细胞中 一个NULL值已插入 显然它认为我的意思是NULL值而不是 NULL 文本
  • 地址范围:寿命不够长

    我对这两个看似相似的程序的结果感到惊讶 fn main let y int 31i println My number is y Output My number is 31 但是 这段代码给了我一个错误 fn main let y int
  • 在 GAE/python 中存储密码的最佳实践

    我需要在我的 GAE python2 7 应用程序中实现密码存储 我已经实现了 cookie 进行授权 我已经有了帐户 用户模型 并且我已经通过第三方进行了身份验证 现在我需要通过密码添加身份验证 客户请求 我希望安全地存储密码 我已经确定
  • 具有自定义字体的 TextView 未垂直居中

    我需要使用自定义字体 VAG Rounded 可能不相关 但字体会改变我的 TextView 的反应方式 在下图中 您可以看到两个具有黑色背景的文本视图 左边一种使用自定义字体 右边一种使用默认系统字体 Roboto 它们都有相同的 xml
  • gulp - 缩小 CSS 时排除文件

    我是 Gulp 新手 我已经能够成功安装 连接和缩小我的 js 和 css 文件 但是 有一个我想排除的 css 文件 print css 我已按照此处的说明进行操作 https www npmjs org package gulp ign
  • 仅捕获 arp-reply 数据包的 BPF 表达式

    有没有BPF http biot com capstats bpf html只捕获 arp reply 数据包的表达式 目前 我正在使用 Pcap4J 和以下 BPF 表达式 arp 和 dst 主机host和乙醚 dstmac where
  • 如何将 Firestore 查询转换为 Javascript 数组

    我正在尝试导出一个 firestore 函数 该函数执行查询并返回包含该查询中的对象的数组 我正在尝试从文档的子集合中获取数据 并获取返回的文档对象数组以呈现给客户端 我已经尝试了以下方法 但它不起作用 例如 对象返回空白 我认为这与承诺处
  • Scala 中函数组合的简洁语法?

    我正在学习 Scala 并遇到了以下任务 如果字符串为空则返回 null 否则将其大写 Apache Commons 中有两个函数组合在一起可以解决这个问题 在 Haskell 中我会这样写 upperCaseOrNull StringUt
  • Android 新手相机方向

    我正在使用相机工作面临相机方向问题 我在互联网上找到了一些答案 我认为这个答案可能最适合我 谁能给我详细的指导吗如何添加这个答案 https stackoverflow com questions 3841122 android camer