私の要件は、カメラから写真を撮るか、ギャラリーから画像を選択して画像ビューで表示することです。画像を表示した後、選択した画像が何であれ、メールとして送信します。私の問題は、カメラが回転して画像ビューに表示されるたびにポートレート写真を撮ることです。この問題を解決する方法。
前もって感謝します。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.skicka_bild_activity);
share = new Sharedprefs(SkickaBild.this);
emailSendButton = (Button) findViewById(R.id.skicka_button);
emailSendButton.setOnClickListener(this);
emailSendButton.setEnabled(false);
Button camaraOnButtton = (Button) findViewById(R.id.fotografera_button);
camaraOnButtton.setOnClickListener(this);
Button galleryOpenButton = (Button) findViewById(R.id.valj_bild_button);
galleryOpenButton.setOnClickListener(this);
imageSetImageView = (ImageView) findViewById(R.id.imageView_skick);
maxWidth = share.getmaxwidth();
mContentResolver = getContentResolver();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.skicka_button:
if (isImageViewFilled) {
showEmailComposer();
} else {
AlertDialog.Builder builder = new AlertDialog.Builder(
SkickaBild.this);
builder.setTitle("Alert !!");
builder.setMessage("Pick a image before you send the email")
.setCancelable(false)
.setPositiveButton("Ok",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
break;
case R.id.fotografera_button:
share.setisFromTabsClearImage(false);
String fileName = "temp.jpg";
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, fileName);
mCapturedImageURI = getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Intent takePictureIntent = new Intent(
MediaStore.ACTION_IMAGE_CAPTURE);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
mCapturedImageURI);
startActivityForResult(takePictureIntent, 0);
break;
case R.id.valj_bild_button:
share.setisFromTabsClearImage(false);
Intent pickPhoto = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(pickPhoto, 1);
break;
}
}
protected void onActivityResult(int requestCode, int resultCode,
Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
switch (requestCode) {
case 0:
if (resultCode == RESULT_OK) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(mCapturedImageURI,
projection, null, null, null);
int column_index_data = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String capturedImageFilePath = cursor
.getString(column_index_data);
Bitmap mImageBitmap = BitmapFactory
.decodeFile(capturedImageFilePath);
imageSetImageView.setImageBitmap(mImageBitmap);
isImageViewFilled = true;
if (isImageViewFilled) {
emailSendButton.setEnabled(true);
emailSendButton.setBackgroundDrawable(getResources()
.getDrawable(R.drawable.skicka_button_black));
}
File root = Environment.getExternalStorageDirectory();
if (root.canWrite()) {
System.out.println("PICTURE PATH " + capturedImageFilePath);
pic = new File(capturedImageFilePath);
String cPath = pic.getAbsolutePath();
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
bmOptions.inJustDecodeBounds = true;
BitmapFactory.decodeFile(cPath, bmOptions);
float photoW = mImageBitmap.getWidth();
float photoH = mImageBitmap.getHeight();
// Get the dimensions of the View
float targetW = Float.parseFloat(maxWidth);
float targetH = (photoH / photoW) * targetW;
System.out.println("cam bitmap height"
+ mImageBitmap.getHeight());
System.out.println("cam bitmap weidth" + maxWidth);
System.out.println("cam bitmap Width 02 "
+ mImageBitmap.getWidth());
System.out.println("cam target Height " + targetH);
System.out.println("cam target width " + targetW);
bmOptions.inJustDecodeBounds = false;
bmOptions.inSampleSize = (int) scaleFactor;
bmOptions.inPurgeable = true;
Bitmap bitmap = BitmapFactory.decodeFile(cPath, bmOptions);
mImageBitmap = Bitmap.createScaledBitmap(bitmap,
(int) targetW, (int) targetH, false);
FileOutputStream fout;
try {
fout = new FileOutputStream(pic);
mImageBitmap.compress(Bitmap.CompressFormat.JPEG, 100,
fout);
fout.flush();
fout.close();
bitmap.recycle();
} catch (Exception e) {
e.printStackTrace();
}
}
}
break;
case 1:
if (resultCode == RESULT_OK) {
Uri selectedImage = imageReturnedIntent.getData();
InputStream in = null;
String[] filePathColumn = { MediaStore.Images.Media.DATA };
try {
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
System.out.println("PICTUREPATH" + picturePath);
cursor.close();
Bitmap imageBitmap = BitmapFactory.decodeFile(picturePath);
int orientation = getOrientation(this, selectedImage);
System.out.println("ORIENTATION VALUE " + orientation);
imageSetImageView.setImageBitmap(imageBitmap);
isImageViewFilled = true;
if (isImageViewFilled) {
emailSendButton.setEnabled(true);
emailSendButton.setBackgroundDrawable(getResources()
.getDrawable(R.drawable.skicka_button_black));
}
// ////////////////////////// Image is set ///////////////
pic = new File(picturePath);
String cPath = pic.getAbsolutePath();
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
bmOptions.inJustDecodeBounds = true;
BitmapFactory.decodeFile(cPath, bmOptions);
float photoW = imageBitmap.getWidth();
float photoH = imageBitmap.getHeight();
// Get the dimensions of the View
float targetW = Float.parseFloat(maxWidth);
float targetH = (photoH / photoW) * targetW;
System.out.println(" bitmap height"
+ imageBitmap.getHeight());
System.out.println(" bitmap weidth" + maxWidth);
System.out.println(" bitmap Width 02 "
+ imageBitmap.getWidth());
System.out.println(" target Height " + targetH);
System.out.println(" target width " + targetW);
float scaleFactor = Math.min(photoW / targetW, photoH
/ targetH);
bmOptions.inJustDecodeBounds = false;
bmOptions.inSampleSize = (int) scaleFactor;
bmOptions.inPurgeable = true;
Bitmap bitmap = BitmapFactory.decodeFile(cPath, bmOptions);
imageBitmap = Bitmap.createScaledBitmap(bitmap,
(int) targetW, (int) targetH, false);
FileOutputStream fout;
fout = new FileOutputStream(pic);
imageBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fout);
fout.flush();
fout.close();
bitmap.recycle();
} catch (Exception e) {
e.printStackTrace();
}
}
break;
}
}
public static int getOrientation(Context context, Uri photoUri) {
String[] orientationColumn = { MediaStore.Images.Media.ORIENTATION };
Cursor cursor = context.getContentResolver().query(photoUri,
orientationColumn, null, null, null);
try {
if (cursor.moveToFirst()) {
return cursor.getInt(cursor
.getColumnIndex(orientationColumn[0]));
} else {
return -1;
}
} finally {
cursor.close();
}
}
private void showEmailComposer() {
Intent email = new Intent(Intent.ACTION_SEND);
email.putExtra(Intent.EXTRA_EMAIL, new String[] { share.getMailTo() });
email.putExtra(Intent.EXTRA_SUBJECT, share.getsubject());
email.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(pic));
// email.putExtra(Intent.EXTRA_STREAM, pic.getName());
email.putExtra(Intent.EXTRA_TEXT, share.getemailbody());
email.setType("message/rfc822");
startActivity(Intent.createChooser(email, "Choose an Email client :"));
isEmailSend = true;
}
@Override
protected void onResume() {
super.onResume();
System.out.println("ON RESUME INCOMING CHECK");
if (share.getisFromTabsClearImage()) {
imageSetImageView.setImageDrawable(getResources().getDrawable(
R.drawable.ingenbildvald));
emailSendButton.setBackgroundDrawable(getResources().getDrawable(
R.drawable.skicka_button));
emailSendButton.setEnabled(false);
share.setisFromTabsClearImage(false);
}
if (isEmailSend) {
imageSetImageView.setImageDrawable(getResources().getDrawable(
R.drawable.ingenbildvald));
emailSendButton.setBackgroundDrawable(getResources().getDrawable(
R.drawable.skicka_button));
emailSendButton.setEnabled(false);
isEmailSend = false;
}
}