开发者

android set the image I crop as wallpaper

I just crop the image to get part of it. But Android set the returned image as the wallpaper. Why? I trac开发者_开发百科k the android code, and in Gallery3D application(com.cooliris), I found this:

    // TODO: A temporary file is NOT necessary
    // The CropImage intent should be able to set the wallpaper directly
    // without writing to a file, which we then need to read here to write
    // it again as the final wallpaper, this is silly
    mTempFile = getFileStreamPath("temp-wallpaper");
    mTempFile.getParentFile().mkdirs();

    int width = getWallpaperDesiredMinimumWidth();
    int height = getWallpaperDesiredMinimumHeight();
    intent.putExtra("outputX", width);
    intent.putExtra("outputY", height);
    intent.putExtra("aspectX", width);
    intent.putExtra("aspectY", height);
    intent.putExtra("scale", true);
    intent.putExtra("noFaceDetection", true);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mTempFile));
    intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.name());
    // TODO: we should have an extra called "setWallpaper" to ask CropImage
    // to set the cropped image as a wallpaper directly. This means the
    // SetWallpaperThread should be moved out of this class to CropImage

Please focus on the last lines, The TODO. It tells that the crop intent will do the setting job. Well, I don't need it at all. So, HOW TO CROP AN IMAGE WITHOUT SETTING THE WALLPAPER? Thanks!


Do this in your code (keeping in mind it won't work on all phones, like HTC because they use their own gallery/camera.

File f = new File(Environment.getExternalStorageDirectory(), "/temporary_holder.png");
f.createNewFile();
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setClassName("com.android.gallery", "com.android.camera.CropImage");
intent.setType("image/*"); 
intent.setData(ImageToSetUri);   // Local URI of your image
intent.putExtra("crop", true);
intent.putExtra("outputX", width); // width/height of your image
intent.putExtra("outputY", height);
intent.putExtra("aspectX", width);
intent.putExtra("aspectY", height);
intent.putExtra("scale", true);
intent.putExtra("noFaceDetection", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.name());
startActivityForResult(intent, 1);

then do this to retrieve the image as a bitmap, or however you want

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK)
          if (data != null) {
              Bitmap selectedImage = BitmapFactory.decodeFile(f);       
          }
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜