zoukankan      html  css  js  c++  java
  • Android 低版本sdk中没有getSupportedPreviewSizes和getSupportedPictureSizes函数怎么办?

    在做camera和SurfaceView做摄像头程序时,需要获取camera支持的相片大小,在低版本sdk中没有getSupportedPictureSizes函数,怎么办呢,请参阅下面的关键代码:

    1、定义Size类

    public class Size {
    
        /***
    
         * Sets the dimensions for pictures.
    
         *
    
         * @param w the photo width (pixels)
    
         * @param h the photo height (pixels)
    
         */
    
        public Size(int w, int h) {
            width = w;
            height = h;
        }
    
        /***
    
         * Compares {@code obj} to this size.
    
         *
    
         * @param obj the object to compare this size with.
    
         * @return {@code true} if the width and height of {@code obj} is the
    
         *         same as those of this size. {@code false} otherwise.
    
         */
    
        @Override
    
        public boolean equals(Object obj) {
            if (!(obj instanceof Size)) {
                return false;
            }
            Size s = (Size) obj;
            return width == s.width && height == s.height;
        }
    
        @Override
    
        public int hashCode() {
            return width * 32713 + height;
        }
    
        /*** width of the picture */
        public int width;
    
        /*** height of the picture */
        public int height;
    }

    2、定义CameraHelper类

    import java.util.ArrayList;
    import java.util.List;
    import java.util.StringTokenizer;
    import android.hardware.Camera;
    public class CameraHelper {
        private static final String KEY_PREVIEW_SIZE = "preview-size";
        private static final String KEY_PICTURE_SIZE = "picture-size";
        private static final String SUPPORTED_VALUES_SUFFIX = "-values";
        private Camera.Parameters mParms;
    
        public CameraHelper(Camera.Parameters parm) {
            this.mParms = parm;
        }
    
        public List<Size> GetSupportedPreviewSizes() {
            String str = mParms.get(KEY_PREVIEW_SIZE + SUPPORTED_VALUES_SUFFIX);
            return splitSize(str);
        }
    
        public List<Size> GetSupportedPictureSizes() {
            String str = mParms.get(KEY_PICTURE_SIZE + SUPPORTED_VALUES_SUFFIX);    
            return splitSize(str);
        }    
        
        private ArrayList<Size> splitSize(String str) {
            if (str == null)
                return null;
            StringTokenizer tokenizer = new StringTokenizer(str, ",");
            ArrayList<Size> sizeList = new ArrayList<Size>();
            while (tokenizer.hasMoreElements()) {
                Size size = strToSize(tokenizer.nextToken());
                if (size != null)
                    sizeList.add(size);
            }
            if (sizeList.size() == 0)
                return null;
            return sizeList;
        }
    
        private Size strToSize(String str) {
            if (str == null)
                return null;
            int pos = str.indexOf('x');
            if (pos != -1) {
                String width = str.substring(0, pos);
                String height = str.substring(pos + 1);
                return new Size(Integer.parseInt(width), Integer.parseInt(height));
            }
            return null;
        }
    
    }

    其实,主要是通过Camera.Parameters的get方法,然后再解析获取的字符串来代替那些不存在的api。

  • 相关阅读:
    [svc]二三层数据格式&&三层数据如何匹配路由
    [na][dhcp]dhcp细枝末节&dhcp防攻
    [docker]使用quaaga实现(rip ospf)实现主机间容器互通
    [svc]centos7安装优化最佳姿势
    [svc]gns3模拟器及探讨几个bgp问题
    [svc]ip routing和no ip routing
    [docker]macvlan实现双vlan互通
    Jmeter 日志设置---如何设置java协议中被测jar的日志?
    Jmeter java协议配置文件导入
    eclipse, Log4j配置(真心的详细~)
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4218566.html
Copyright © 2011-2022 走看看