Android хочу обрезать изображение размером 500 * 500, работает на всех устройствах, кроме samsung - PullRequest
2 голосов
/ 15 декабря 2011

В качестве заголовка я хочу обрезать изображение размером 500 * 500. Оно работает на большинстве устройств (например, htc, sonyerrison, motors ..), но в Samsung (Sii / Ace ...).

На самом деле, Samsung Device может работать на 360 * 360, но когда я изменяю размер до 500 * 500.

Поведение довольно странное, когда я ставлю

 intent.putExtra("outputX", 500);
 intent.putExtra("outputY", 360);
 startActivityForResult(intent,PHOTORESOULT),

Это возвращаетсяна onActivityResult()

Вот код обрезки, и я уверен, что в этом URI есть изображение

    public void startPhotoZoom(Uri uri) {

             Bitmap bitmap =null;
    try {
        bitmap = MediaStore.Images.Media.getBitmap(
                this.getContentResolver(), uri);
        Log.v("cropImage","Heigh="+bitmap.getHeight()+" Width="+bitmap.getWidth());
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    int width=bitmap.getWidth();
    int height=bitmap.getHeight();

    Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setDataAndType(uri, IMAGE_UNSPECIFIED);
    intent.putExtra("crop", "true");
    intent.putExtra("aspectX", 1);
    intent.putExtra("aspectY", 1);
    if(width < 500 || height < 500){
        if(width <= height){
            intent.putExtra("outputX", width); 
            intent.putExtra("outputY", width);
            Log.v("cropImage","outputX="+width+" outputY="+width);
        }else{
            intent.putExtra("outputX", height); 
            intent.putExtra("outputY", height);
            Log.v("cropImage","outputX="+height+" outputY="+height);
        }
    }else{
        intent.putExtra("outputX", 360);
        intent.putExtra("outputY", 360);
    }

    intent.putExtra("noFaceDetection", true);
    intent.putExtra("scale", true);
    intent.putExtra("return-data", true);
    startActivityForResult(intent, PHOTORESOULT);
}

Я борюсь некоторое время ~ Пожалуйста, помогите ~

Ответы [ 2 ]

6 голосов
/ 04 августа 2012

Полагаю, обрезанное изображение просто слишком большое.Чтобы быть уверенным, что вы должны прочитать logcat.

У меня возникла та же проблема: слишком большое изображение не было передано в onActivityResult и пришлось разрешить сохранение обрезанного изображения на диск, а затем загрузить его отдельно.

просто опустите

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

и установите вместо него

 Uri destination;
 // some code to retriev an valid Uri
 intent.putExtra(MediaStore.EXTRA_OUTPUT, destination);

.Убедитесь, что пункт назначения Uri указывает на файл.

0 голосов
/ 05 марта 2014

Вы можете изменить таким образом, и вы получите точное обрезанное изображение от onActivityResult ()

intent.putExtra("return-data", false);
...