【问题标题】:Cropping Picture on Droid X sets resulting image as wallpaper在 Droid X 上裁剪图片将生成的图像设置为壁纸
【发布时间】:2010-09-13 14:50:09
【问题描述】:

在尝试裁剪用户从他们的图库中选择的图像时,我的程序遇到了问题。到目前为止,该问题仅在 Droid X 上运行时出现,因为在原始 moto Droid 上运行正常。

基本上,在运行裁剪意图时会出现问题。一旦用户裁剪照片并单击保存按钮,它就会将主屏幕上的壁纸替换为保存的裁剪图像!它不会在 moto droid 或模拟器上执行此操作。下面是裁剪图片并将图片保存到 SD 卡的代码:

@Override
public void onActivityResult(int requestCode,int resultCode,Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode ==1){
if (resultCode == Activity.RESULT_OK) {
  Intent i = new Intent("com.android.camera.action.CROP");
  i.setData(data.getData());
  i.putExtra("noFaceDetection", true);
  i.putExtra("outputX", 80);
  i.putExtra("outputY", 80);
  i.putExtra("aspectX", 1);
  i.putExtra("aspectY", 1);
  i.putExtra("scale", true);


if(selectedImageString == null){
      ContentValues values = new ContentValues();
      values.put(android.provider.MediaStore.Images.Media.TITLE, "Temp_Icon1");
      values.put(android.provider.MediaStore.Images.Media.BUCKET_ID, "Temp_Icons");
      values.put(android.provider.MediaStore.Images.Media.BUCKET_DISPLAY_NAME,"Temp_Icons");
      values.put(android.provider.MediaStore.Images.Media.IS_PRIVATE, 1);
      selectedImageString = getContentResolver().insert(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values).toString();
  }
  i.putExtra("output", Uri.parse(selectedImageString));
  startActivityForResult(i, 2);
}
}
 if(requestCode == 2){
 if (resultCode == Activity.RESULT_OK){
  uriPath = Uri.parse(selectedImageString);
  imageView.setImageURI(uriPath);
 }
}

}

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 我在 Droid 2 上的应用程序中看到了同样的问题。有什么想法吗?我注意到 Droid 2 上的联系人应用程序在裁剪后更新壁纸的副作用不同,因此我们的应用程序必须有办法避免这种情况......

标签: android image crop wallpaper


【解决方案1】:

即使使用上面提到的“输出”选项,我也可以验证 Droid X 是否为我做同样的事情。到目前为止,我还没有找到解决办法,我也会考虑阻止 Droid X 手机的裁剪功能。可惜在这里不起作用。

按照他们的方式,您可以尝试以下...

i.putExtra("return-data", true);

这将返回返回意图中的图像。您可以通过以下方式访问它...

BitMap BM = data.getParcelableExtra("data");

不过,Galaxy S 系列手机不支持此功能。无论如何,它都会返回一个空包裹。所以,我还没有找到好的解决方案。

【讨论】:

    【解决方案2】:

    可能是因为您在调用裁剪意图时没有指定数据的放置位置,所以它正在覆盖图像。

    我认为裁剪意图是内部代码,所以我不确定我们是否可以确定(顺便说一句,并非所有手机都可以找到裁剪意图)

    当我调用裁剪意图时,我通过了

    i.putExtra("output", croppedOutputUri);
    

    【讨论】:

    • 谢谢,我决定将裁剪功能限制在我可以实际测试并确认按我需要的方式工作的手机上。
    • @losSebos 建议 MediaStore.EXTRA_OUTPUT 比“输出”更好。
    【解决方案3】:

    您是否尝试过放置:

    i.putExtra("setWallpaper", false);
    

    我从这里拿走了它: https://github.com/lvillani/android-cropimage/blob/master/src/com/android/camera/CropImage.java

    有一个库,它可能是从原始资源中提取并修改的,你可以在那里看到这个属性设置

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多