2

I'll be creating an application which has some amount of Image Processing as its core feature. I'll be wanting to do following things with it-

  • Be able to save the downloaded or created Images in the phone memory/ SDCard that may be available in Gallery too.
  • Apply some effects to images like Resizing, Cropping, Rotating
  • Will be having design templates which will be in the form of transparent PNGs, They can be layered over each another to create an effect or a new design (Like a fancy photo frame or so) and at a point of time, they will be required to be flattened and saved as PNGs at some point of time.

I am looking for some way to perform these things nicely.

I have seen that Android helps the developers implement the Business Logic quite easily without letting them bother about the API or widget level details.

Is there anything available for my requirements?

Please let me know. Thanks!

Aman Alam
  • 11,231
  • 7
  • 46
  • 81

1 Answers1

3
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
thiz = this;
setContentView(R.layout.main);
mBtn = (Button) findViewById(R.id.btnLaunch);
photo = (ImageView) findViewById(R.id.imgPhoto);
mBtn.setOnClickListener(new OnClickListener(){

public void onClick(View v) {
try {
// Launch picker to choose photo for selected contact
Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
intent.setType("image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", aspectX);
intent.putExtra("aspectY", aspectY);
intent.putExtra("outputX", outputX);
intent.putExtra("outputY", outputY);
intent.putExtra("scale", scale);
intent.putExtra("return-data", return_data);
intent.putExtra(MediaStore.EXTRA_OUTPUT, getTempUri());
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection",!faceDetection); // lol, negative boolean noFaceDetection
if (circleCrop) {
intent.putExtra("circleCrop", true);
}

startActivityForResult(intent, PHOTO_PICKED);
} catch (ActivityNotFoundException e) {
Toast.makeText(thiz, R.string.photoPickerNotFoundText, Toast.LENGTH_LONG).show();
}
}
});

}

private Uri getTempUri() {
return Uri.fromFile(getTempFile());
}

private File getTempFile() {
if (isSDCARDMounted()) {

File f = new File(Environment.getExternalStorageDirectory(),TEMP_PHOTO_FILE);
try {
f.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
Toast.makeText(thiz, R.string.fileIOIssue, Toast.LENGTH_LONG).show();
}
return f;
} else {
return null;
}
}

private boolean isSDCARDMounted(){
String status = Environment.getExternalStorageState();

if (status.equals(Environment.MEDIA_MOUNTED))
return true;
return false;
}

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

switch (requestCode) {
case PHOTO_PICKED:
if (resultCode == RESULT_OK) {
if (data == null) {
Log.w(TAG, "Null data, but RESULT_OK, from image picker!");
Toast t = Toast.makeText(this, R.string.no_photo_picked,
Toast.LENGTH_SHORT);
t.show();
return;
}

final Bundle extras = data.getExtras();
if (extras != null) {
File tempFile = getTempFile();
// new logic to get the photo from a URI
if (data.getAction() != null) {
processPhotoUpdate(tempFile);
}
}
}
break;
}
}

It a used for crop the image . or http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/2.2_r1.1/com/android/camera/CropImage.java check this link

Damodhar
  • 31
  • 1
  • Thanks Damodhar.. this code seems more like the one which manipulates the picture taken from a camera, while my general scenario would be manipulate the images sourcing from various other things like local storage, the web and more. I hope I can transform this code for my purpose. Thanks! – Aman Alam Dec 08 '10 at 07:29
  • Ohh.. it isn't. Sorry, I didn't read it carefully for the first time. It will surely help me buddy. Thanks! – Aman Alam Jan 25 '11 at 05:22