2016-08-20 2 views
0

Я попытался закодировать простую функцию, которая обрезала бы изображение (сохраненное в выпадающей папке) после нажатия кнопки и возвратила обрезанное изображение в первом Управлении в imageView , Aftrer пытается передать растровое изображение в массиве с помощью намерения, которое не работает, теперь я пытаюсь сохранить обрезанное изображение во внутреннем хранилище и читать его в функции OnActivityResult, однако, когда я закончил кадрирование, я ничего не получаю в мой ImageView.Сохранить/прочитать растровое изображение во внутреннем хранилище не работает

Для кадрирования я использовал следующую библиотеку: https://github.com/ArthurHub/Android-Image-Cropper/wiki

Вот код:

public class MainActivity extends AppCompatActivity { 

Button b; 
ImageView preview; 
final int REQUEST_CODE_TEST = 63; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    b = (Button) findViewById(R.id.chooser); 
    preview = (ImageView) findViewById(R.id.preview); 

    b.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(getApplicationContext(), Cropper.class); 
      startActivityForResult(intent, REQUEST_CODE_TEST); 
     } 
    }); 

} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (requestCode == REQUEST_CODE_TEST && resultCode == RESULT_OK) { 
     try { 
      String path=data.getData().toString(); 
      File f=new File(path,"profile.jpg"); 
      Bitmap bitmap = BitmapFactory.decodeStream(new FileInputStream(f)); 
      preview.setImageBitmap(bitmap); 

     }catch (Exception e){ 
      e.printStackTrace(); 
     } 
    } 
} 

Урожай actvity:

public class Cropper extends Activity { 
CropImageView cropImageView; 
Bitmap bitmap; 
Button button; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.cropper); 
    bitmap= BitmapFactory.decodeResource(getResources(),R.drawable.ic_bonnasse); 
    cropImageView=(CropImageView)findViewById(R.id.cropImageView); 
    cropImageView.setCropShape(CropImageView.CropShape.RECTANGLE); 
    cropImageView.setImageBitmap(bitmap); 

    button=(Button)findViewById(R.id.button); 

    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      finish(); 
     } 
    }); 

} 

@Override 
public void finish() { 
    super.finish(); 
    Intent retour=new Intent(); 
    Bitmap crop=cropImageView.getCroppedImage(); 
    Bitmap out=Bitmap.createScaledBitmap(crop, 200, 200, true); 
    ContextWrapper cw = new ContextWrapper(getApplicationContext()); 
    File directory = cw.getDir("Profile_pic", Context.MODE_PRIVATE); 
    File mypath=new File(directory,"profile.jpg"); 

    FileOutputStream outputStream=null; 
    try{ 
     outputStream=new FileOutputStream(mypath); 
     out.compress(Bitmap.CompressFormat.PNG, 100, outputStream); 
     outputStream.close(); 
    }catch (Exception e){ 
     e.printStackTrace(); 
    } 
    retour.putExtra("directory",directory.getAbsolutePath()); 
} 

Спасибо за вашу помощь.

ответ

0

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

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (requestCode == REQUEST_CODE_TEST && resultCode == RESULT_OK) { 

     Bitmap bitmap = (Bitmap) data.getParcelableExtra("bitmap"); 

     preview.setImageBitmap(bitmap); 

    } 

На этом рисунке код результата всегда RESULT_CANCEL, поэтому ваш блок If не работает.

Решение:

Не переопределять метод отделки(), просто использовать его и изменить слушатель с этим в растениеводстве деятельности.

button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent retour=new Intent(); 
      Bitmap crop = BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher); 
      Bitmap out=Bitmap.createScaledBitmap(crop, 200, 200, true); 
      retour.putExtra("bitmap", out); 

      setResult(RESULT_OK, retour); 
      finish(); 
     } 
    }); 

В этом случае, я только что прошел растровое изображение в основную деятельность, но если вы готовы сохранить растровую затем отправить его основную деятельность, вы, предполагаете, чтобы сохранить его и поместить его в retour.putExtra("directory",directory.getAbsolutePath()); в своей деятельности по растению, а затем получите его String directory = data.getStringExtra("directory"); в onActivityResult.

Хотя, на мой взгляд, первый способ лучше, у вас есть второй.

+0

Большое спасибо – Cornetto

+0

, но даже после внесения изменений все еще не работает, изображение не отображается в моем «imageView» – Cornetto

+0

Возможно, у вас есть вторая проблема. Вы успешно сохранили обрезанное растровое изображение на SD-карте? –