zoukankan      html  css  js  c++  java
  • Android中级第五讲获得并设置相机分辨率以及镜头图片倒转问题


                  博客出自:http://blog.csdn.net/liuxian13183,转载注明出处! All Rights Redserved !  


    今天我们讲一下如何获得并设置相机分辨率的问题,算是技术贴,也算知识扫盲贴。

    有很多网友会问,为什么我的相机设置分辨率没效果啊?


    首先,做相机程序,必须要硬件支持!如开启声音、分辨率设置、对焦等功能。

    如果说不支持就得到不到想到的效果,如很多相机程序可以设置分辨率,但感觉不成功,500w的相机,愣是只有300w的效果。


    这里主要讲如何利用surfaceView来开发相机,并设置分辨率参数,以此来设置图片的大小,此方法应在surfaceChanged或者surfaceCreated方法里执行,

    如选surfaceCreated,那配置要另写一个页面,这样camera会被destroy掉,然后回来再被created,当然这个方法比较简单;

    如选surfaceChanged,配置写在本页面即可,但实现起来有些难度。

    代码如下:

    // 获得相机参数
    Camera.Parameters parameters = camera.getParameters();
    if (TextUtils.isEmpty(g3_setting.getString(AppData.G3_CAMERA_SIZE,
    ""))) {
    // 获取自己手机合适的尺寸
    StringBuffer sb = new StringBuffer();
    List<Camera.Size> sizeList = parameters
    .getSupportedPreviewSizes();
    Iterator<Camera.Size> itor1 = sizeList.iterator();
    while (itor1.hasNext()) {
    Camera.Size cur = itor1.next();
    String str = cur.height + "x" + cur.width + ":";
    sb.append(str);
    }
    Log.i("Travel", "sb……" + sb.toString());
    Editor editor = g3_setting.edit();
    editor.putString(AppData.G3_CAMERA_SIZE, sb.toString());
    editor.commit();
    }
    // 设置分辨率
    pic_Width = g3_setting.getInt(AppData.G3_PIC_WIDTH, 800);
    pic_Height = g3_setting.getInt(AppData.G3_PIC_HEIGHT, 640);
    Log.i("Travel", pic_Height + ":" + pic_Width);
    // 设置照片大小
    parameters.setPictureSize(pic_Width, pic_Height);
    如果只讲分辨率,觉得本篇博文讲的太少了,那么再加入两个知识点,使surfaceView开发相机程序时,为什么,镜头是倒着的、图片是倒着的,以及解决方案。
    毋庸置疑,镜头设置也是由硬件支持的,大部分支持,少部分不支持。
    关于镜头左转90的问题。
    相机经常捕获的画面和手机方向不一致,比如手机是竖着拿的,但是画面是横的,这是由于摄像头默认是根据横向来捕获画面的,但你的手机是竖着的。
    解决办法:
    在设置相机参数时加入如下代码
    // 设置镜头翻转
    if (Integer.parseInt(Build.VERSION.SDK) >= 8) {
    setDisplayOrientation(camera, 90);
    } else {
    parameters.setRotation(90);
    }


    protected void setDisplayOrientation(Camera camera, int angle) {
    Method downPolymorphic;
    try {
    downPolymorphic = camera.getClass().getMethod(
    "setDisplayOrientation", new Class[] { int.class });
    if (downPolymorphic != null)
    downPolymorphic.invoke(camera, new Object[] { angle });
    } catch (Exception e1) {
    }
    }
    关于图片保存时,左转90度的问题,原因如上所述
    解决办法:
    if (AppData.isLandscape) { // 竖拍
    Matrix matrix = new Matrix();
    matrix.reset();
    matrix.postRotate(90);
    bMapRotate = Bitmap.createBitmap(bMap, 0, 0, bMap.getWidth(),
    bMap.getHeight(), matrix, true);
    bMap = bMapRotate;
    }
    BufferedOutputStream bos = new BufferedOutputStream(
    new FileOutputStream(file));
    bMap.compress(Bitmap.CompressFormat.PNG, 100, bos);// 将图片压缩到流中
    bos.flush();// 输出
    bos.close();// 关闭


    欢迎大家踊跃交流!


    示例DEMO:Android对焦拍照功能实现


    
    

  • 相关阅读:
    如何导出和导入mysql数据(数据迁移)
    C# exe dll防止反编译-- dotNET_Reactor
    C#防止反编译
    WCF异常相关
    了解WCF的前世今生之实现服务端(一)
    svn忽略文件后缀
    马云给年轻人的10句忠告 真的后悔才看到!
    如何利用好清晨与夜间的时间?
    浙江旅游好去处
    突然觉得生活好累......
  • 原文地址:https://www.cnblogs.com/fengju/p/6174470.html
Copyright © 2011-2022 走看看