Android 在低版本sdk中没有getSupportedPreviewSizes和getSupportedPictureSizes函数怎么办?

本文介绍了一种在缺少官方API的情况下,通过自定义方法获取Android Camera支持的预览及拍照尺寸的技术方案。通过实现Size类和CameraHelper类,利用Camera.Parameters的特性,解析其返回的字符串以获取支持的分辨率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在做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。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值