2016-08-20 6 views
0

ボタンを押した後に画像をトリミングして、imageViewの最初のアクティビティでトリミングされた画像を返す単純な機能割り当てをコード化しようとしました。 。 Aftrerは、動作しなかったインテントでビットマップをarraybyteに渡そうとしましたが、今度は内部ストレージに画像を保存して、OnActivityResult関数で読み取ろうとしていますが、トリミングが終わったら何も得られません私のImageView。私は次のライブラリを使用するためにトリミング保存/読み込み内部メモリのビットマップが機能しない

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()); 
} 

おかげhttps://github.com/ArthurHub/Android-Image-Cropper/wiki

ここでは、コードです。

答えて

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()); にそれを置くことを想定していますonActivityResultのString directory = data.getStringExtra("directory");でそれを取得してください。

私の見解では最初の方法が優れていますが、2番目の方法があります。

+0

大変ありがとうございます。 – Cornetto

+0

しても、変更してもまだ動作しません。イメージは、「imageView」に表示されません。 – Cornetto

+0

2番目の問題が発生する可能性があります。切り取ったビットマップをSDカードに保存しましたか? –

関連する問題