0

私のアプリケーションでは、ギャラリー/カメラから画像を取得し、それらの画像をトリミングしてから、トリミングした画像を別の場所に保存する必要があります。以下のコードはそのほとんどを行いますが、私の好みに合わせて画像を切り取ることはできません。以下のコードを使用すると、画像の中央座標の上、下、左、右の 4 つの座標を使用して画像をトリミングできます。しかし、8つの座標を使用してトリミングする必要があります。この画像は私の言いたいことを示しています。

public class MainActivity extends Activity {
  private static final int PICK_FROM_CAMERA = 1;
  private static final int PICK_FROM_GALLERY = 2;
  private static final int PRESS_OK = 3;
  ImageView imgview;
  String m_path;
  Bitmap m_thePic;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    imgview = (ImageView) findViewById(R.id.imageView1);
    Button buttonCamera = (Button) findViewById(R.id.btn_take_camera);
    Button buttonGallery = (Button) findViewById(R.id.btn_select_gallery);
    Button buttonOk = (Button) findViewById(R.id.btn_ok);

    File folder = new File(Environment.getExternalStorageDirectory().toString() + "/Images/");
    folder.mkdirs();
    buttonCamera.setOnClickListener(new View.OnClickListener() {
      public void onClick(View v) {
        // call android default camera
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT,
                        MediaStore.Images.Media.EXTERNAL_CONTENT_URI.toString());
        // ******** code for crop image
        intent.putExtra("crop", "true");
        intent.putExtra("aspectX", 0);
        intent.putExtra("aspectY", 0);
        intent.putExtra("outputX", 100);
        intent.putExtra("outputY", 150);

        try {
          intent.putExtra("return-data", true);
          startActivityForResult(intent, PICK_FROM_CAMERA);
        } catch (ActivityNotFoundException e) {
          // Do nothing for now
        }
      }
    });
    buttonGallery.setOnClickListener(new View.OnClickListener() {
      public void onClick(View v) {
        // TODO Auto-generated method stub
        Intent intent = new Intent();
        // call android default gallery
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        // ******** code for crop image
        intent.putExtra("crop", "true");
        intent.putExtra("aspectX", 0);
        intent.putExtra("aspectY", 0);
        intent.putExtra("outputX", 200);
        intent.putExtra("outputY", 150);

        try {
          intent.putExtra("return-data", true);
          startActivityForResult(Intent.createChooser(intent, "Complete action using"), 1);
        } catch (ActivityNotFoundException e) {
          // Do nothing for now
        }
      }
    });
    buttonOk.setOnClickListener(new View.OnClickListener() {
      public void onClick(View v) {
        String m_path = Environment.getExternalStorageDirectory().toString();
        File m_imgDirectory = new File(m_path + "/Images/");
        File m_file = new File(m_path);
        String m_fileid = "nm_tech" + System.currentTimeMillis() + "";
        m_file = new File(m_path, "/Images/" + m_fileid + ".jpg");
        Uri outputFileUri = Uri.fromFile(m_file);

        Intent intent = new Intent(MainActivity.this,
                                   ImageGalleryDemoActivity.class);
        intent.putExtra("image", m_fileid);
        startActivity(intent);
        // startActivityForResult(intent,PRESS_OK);
        // call android default camera
        // Toast.makeText(getApplicationContext(), ,1234).show();
      }
    });
  }

  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Bundle extras = data.getExtras();
    Bitmap m_thePic = extras.getParcelable("data");
    String m_path = Environment.getExternalStorageDirectory().toString();
    File m_imgDirectory = new File(m_path + "/Images/");
    if (!m_imgDirectory.exists()) {
      m_imgDirectory.mkdir();
    }
    OutputStream m_fOut = null;
    File m_file = new File(m_path);
    m_file.delete();
    String m_fileid = "nm_tech" + System.currentTimeMillis() + "";
    m_file = new File(m_path, "/Images/" + m_fileid + ".jpg");
    try {
      if (!m_file.exists()) {
        m_file.createNewFile();
      }
      m_fOut = new FileOutputStream(m_file);
      Bitmap m_bitmap = m_thePic.copy(Bitmap.Config.ARGB_8888, true);
      m_bitmap.compress(Bitmap.CompressFormat.PNG, 100, m_fOut);
      m_fOut.flush();
      m_fOut.close();
      MediaStore.Images.Media.insertImage(getContentResolver(),
                      m_file.getAbsolutePath(),
                                          m_file.getName(),
                                          m_file.getName());
    } catch (Exception p_e) {
    }

    if (requestCode == PICK_FROM_CAMERA) {
      if (extras != null) {
        // Bitmap photo = extras.getParcelable("data");
        imgview.setImageBitmap(m_thePic);
      }
    }

    if (requestCode == PICK_FROM_GALLERY) {
      // Bundle extras2 = data.getExtras();
      if (extras != null) {
        imgview.setImageBitmap(m_thePic);
      }
    }

    if (requestCode == PRESS_OK) {
      Bundle extras11 = data.getExtras();
      Bitmap bmp = (Bitmap) extras.get("data");

      /*
       * Bitmap photo = extras.getParcelable("data");
       * imgview.setImageBitmap(photo); Intent n=new
       * Intent(getApplicationContext(),ImageGalleryDemoActivity.class);
       * n.putExtra("data",photo); startActivity(n);
       */
    }
  }
}
4

1 に答える 1