Camera API:跨设备问题

And*_*w G 14 java camera android

我正在开发一个相机应用程序,基本上作为消息应用程序的一部分来附加图像等.该应用程序需要工作> = SDK 2.2和:

我不能像我喜欢的那样使用默认的Android相机,因为:

  1. 该应用程序的性质决定了图像不应该保存到磁盘,一些OEM(三星)喜欢这样做而不给你一个选择.

  2. 我无法调用任何其他相机应用程序可以拦截的意图,因为那时该应用程序可以保存图像.

我目前的问题是处理Android相机显然不喜欢纵向的事实.具体来说,经过一些挖掘后,我正在监控显示屏,并在轮换时调用setDisplayOrientation(90).这可以工作,但是surfaceview维度也需要更改,这必须在支持的维度内完成,否则参数设置会使应用程序崩溃.

我正在使用我在这里找到的另一个SO片段(getBestPreviewSize()方法)这样做,但它有一个明显的问题,我无法相信我没有找到其他人.

该部分takePicture的生命周期涉及调用PostView图片回调.这将显示当前暂停SurfaceView图像的静止图像,该图像将通过byteArray返回到原始和/或jpeg回调.我的问题是,这个图像在一些看似随机的测试设备上仍然存在偏差!因此,行为是用户以完美的4:3宽高比看到动态相机图像,直到他们拍摄照片并且他们呈现的图像被压扁.请注意,字节数组本身是正确的,当我Bitmap在消息传递端点构造它时,它显示正常,但这仍然是一个问题.

此时我无法看到如何改变静止图像显示.谁能帮我这个?

Kon*_*uda 6

Android相机系统很乱.并且beind焊接到主板,相机芯片不会像portait应用程序 - 所有回调以相机方向溢出数据(你收到的缓冲区实际上是与本机相机应用程序共享的内存块) - 如果你想在你的应用程序时显示它在portait模式下,您必须翻转此数据xy.

我没有在相机使用的表面视图上显示图像,而是用透明覆盖它ImageView并在那里绘制我的位图.

你可以(希望)在java的项目中找到一些灵感,其中android deamon在纵向模式下工作,并通过实时预览绘制位图.(请结帐git,因为它现在正在发布,我正在与git和maven挣扎,请参阅演示目录)