实施Take Picture + Crop或使用premade Intents?

时间:2013-05-06 10:57:47

标签: android android-camera crop android-camera-intent

我正处于Android应用程序的中间,该应用程序拍摄照片,裁剪它并做一些额外的事情。我本来希望做我自己的裁剪系统,但是当我在不同的地方进行测试时问题就出现了。在某些情况下,图片会显示为旋转,而在其他情况下则没有正确裁剪(例如,他们有额外的边距(看到原始图片的额外空间),等等。)

更多相关内容,我考虑过使用Intents 。这会让我从拍摄疯狂,裁剪的图片中解脱出来,并会添加一个有趣的“get from gallery”选项,我还没有实现。 庄稼意图可能不是每个Android (因为它附带了香草相机应用程序,有些设备没有它),所以外部库也应该在我的路上。

然而,我使用裁剪和拍照的方式是“自动的”,这意味着单个按钮拍摄了一张正方形照片(在相机的方形视图之外),同时被裁剪(以及一些后期处理)在没有发布用户的情况下,我看到的作物库不会那样工作(他们打开一个新的活动)。

现在出现了一个问题:将工作留给Intents(和/或外部库)并重新考虑应用程序的逻辑,或坚持使用当前代码并进行边缘案例修改会更好它们出现(在某些设备中旋转而在其他设备中旋转,以不同方式裁剪等)?

PD:我知道这个问题可能不像其他人一样紧张(有些人会说:没有代码行>没有SO!),但它确实与编码有关,所以我找不到更好的地方来问它。

2 个答案:

答案 0 :(得分:1)

Facebook和Instagram已经成功地使用他们自己的库或第三方代码完成了它。已经开始在你自己的裁剪库上工作了我建议你一路走来,边界情况,优化和变通办法都会存在,毫无疑问,你将掌控一切。 例如,您谈到的方向问题可以这样处理:

orientationColumnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.ORIENTATION);     

cursor.getInt(orientationColumnIndex)
if(orient == 90 || orient == 180 || orient == 270 ){
  Matrix matrix = new Matrix();
  matrix.postRotate(orient);
  result = Bitmap.createBitmap(result, 0, 0, 4*screenWidth/15, 4*screenWidth/15, matrix, true);
}

如您所建议的那样,使用默认的android意图进行裁剪对于为广泛的潜在用户群制作的应用程序来说并不是非常可靠。

答案 1 :(得分:0)

关于开源/第三方裁剪库的说明 - 您应该查看源代码并确保它们没有使用裁剪意图(例如,com.android.camera.action.CROP )正如CommonsWare在这里和他的有用博客文章中指出的那样:http://commonsware.com/blog/2013/01/23/no-android-does-not-have-crop-intent.html

我一直在评估github上的不同作物库/开源,其中一些正在使用作物意图。

当然,这假设您关心裁剪应该适用于所有Android设备:)