300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Android中级第五讲--获得并设置相机分辨率以及镜头图片倒转问题

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

时间:2019-07-09 12:54:44

相关推荐

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

博客出自:/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());

mit();

}

// 设置分辨率

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));

press(pressFormat.PNG, 100, bos);// 将图片压缩到流中

bos.flush();// 输出

bos.close();// 关闭

欢迎大家踊跃交流!

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。