当前位置:操作系统 > 安卓/Android >>

Android中级第五讲--获得并设置相机分辨率以及镜头图片倒转问题

今天我们讲一下如何获得并设置相机分辨率的问题,算是技术贴,也算知识扫盲贴。
 
有很多网友会问,为什么我的相机设置分辨率没效果啊?
 
 
 
 
首先,做相机程序,必须要硬件支持!如开启声音、分辨率设置、对焦等功能。
 
如果说不支持就得到不到想到的效果,如很多相机程序可以设置分辨率,但感觉不成功,500w的相机,愣是只有300w的效果。
 
 
 
 
这里主要讲如何利用surfaceView来开发相机,并设置分辨率参数,以此来设置图片的大小,此方法应在surfaceChanged或者surfaceCreated方法里执行,
 
如选surfaceCreated,那配置要另写一个页面,这样camera会被destroy掉,然后回来再被created,当然这个方法比较简单;
 
如选surfaceChanged,配置写在本页面即可,但实现起来有些难度。
 
代码如下:
 
 
[html]  
// 获得相机参数  
            Camera.Parameters parameters = camera.getParameters();  
            if (TextUtils.isEmpty(g3_setting.getString(AppData.G3_CAMERA_SIZE,  
                    ""))) {  
                // 获取自己手机合适的尺寸  
                StringBuffer sb = new StringBuffer();  
                List sizeList = parameters  
                        .getSupportedPreviewSizes();  
                Iterator 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);  
 
// 获得相机参数
Camera.Parameters parameters = camera.getParameters();
if (TextUtils.isEmpty(g3_setting.getString(AppData.G3_CAMERA_SIZE,
""))) {
// 获取自己手机合适的尺寸
StringBuffer sb = new StringBuffer();
List sizeList = parameters
.getSupportedPreviewSizes();
Iterator 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);[html] view plaincopyprint?
如果只讲分辨率,觉得本篇博文讲的太少了,那么再加入两个知识点,使surfaceView开发相机程序时,为什么,镜头是倒着的、图片是倒着的,以及解决方案。
 
如果只讲分辨率,觉得本篇博文讲的太少了,那么再加入两个知识点,使surfaceView开发相机程序时,为什么,镜头是倒着的、图片是倒着的,以及解决方案。毋庸置疑,镜头设置也是由硬件支持的,大部分支持,少部分不支持。
 
 
 
 
关于镜头左转90的问题。
 
相机经常捕获的画面和手机方向不一致,比如手机是竖着拿的,但是画面是横的,这是由于摄像头默认是根据横向来捕获画面的,但你的手机是竖着的。
 
 
解决办法:
 
在设置相机参数时加入如下代码
 
 
[html]  
// 设置镜头翻转  
if (Integer.parseInt(Build.VERSION.SDK) >= 8) {  
    setDisplayOrientation(camera, 90);  
} else {  
    parameters.setRotation(90);  
}  
 
// 设置镜头翻转
if (Integer.parseInt(Build.VERSION.SDK) >= 8) {
setDisplayOrientation(camera, 90);
} else {
parameters.setRotation(90);
}
[java] 
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) {  
    }  
}  
 
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度的问题,原因如上所述
 
解决办法:
 
 
[java]  
if (AppData.isLandscape) { // 竖拍   
    Matrix matrix = new Matrix();  
    matrix.reset();  
    matrix.postRotate(90);  
    bMapRotate = Bitmap.createBitmap(bMap, 0, 0, bMap.getWidth(),  
    &n
补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,