【发布时间】:2012-10-04 22:19:36
【问题描述】:
我正在开发一个相机应用程序,主要是作为消息传递应用程序的一部分来附加图像等。该应用程序需要适用于 >= SDK 2.2 并且:
我不能尽可能多地使用默认的 Android 相机,因为:
应用程序的性质决定了永远不应将图像保存到磁盘,一些 OEM(三星)喜欢在不给您选择的情况下这样做。
我不能调用任何其他相机应用程序可以拦截的意图,因为那样该应用程序可以保存图像。
我目前的问题是处理 Android 相机显然讨厌纵向的事实。具体来说,经过一番挖掘后,我正在监视显示器,并在轮换时调用setDisplayOrientation(90)。这可行,但也需要更改表面视图尺寸,并且必须在支持的尺寸内完成,否则参数设置会使应用程序崩溃。
我正在使用另一个 SO sn-p 我找到 here(getBestPreviewSize() 方法),但它有一个明显的问题,我不敢相信我还没有发现其他人有。
takePicture 生命周期的一部分涉及调用PostView 图片回调。这显示了当前暂停的SurfaceView 图像的静止图像,该图像将通过 byteArray 返回到 raw 和/或 jpeg 回调。我的问题是,这张图片在少数看似随机的测试设备上仍然存在偏差!所以行为是用户以完美的 4:3 纵横比看到动态相机图像,直到他们拍摄照片并且呈现给他们的图像被压扁。请注意,字节数组本身是正确的,当我在消息传递端点构造 Bitmap 时,它显示得很好,但这仍然是一个问题。
此时我不知道如何更改静止图像显示。谁能帮我解决这个问题?
【问题讨论】:
-
你能保留之前的postview图片回调并在实际拍摄照片时显示它吗?最后你能否从拍摄的图片数据中创建一个位图并显示它而不是 postview 图像数据?我想这归结为最终的图像数据是否混乱,或者表面视图是否改变了你的形状。