简体   繁体   中英

Android Camera returns image as Portrait, getting it as landscape?

 Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

        i.putExtra(MediaStore.EXTRA_OUTPUT, MyFileContentProvider.CONTENT_URI);

        startActivityForResult(i, CAMERA_RESULT);

This is how I call camera within my application, and as I require good quality output, I am using a contentProvider in between.

Bitmap mBitmap = BitmapFactory.decodeFile(out.getAbsolutePath());

        ImageView im1 = (ImageView)findViewById(R.id.camTemp);
        im1.setImageBitmap(mBitmap);

and onActivityResult() , this is how I display the taken image.

And in between, this is the code for the contentProvider class.

public class MyFileContentProvider extends ContentProvider {
public static final Uri CONTENT_URI = Uri.parse
        ("content://obx.com.futurister/");
private static final HashMap<String, String> MIME_TYPES =
        new HashMap<String, String>();

static {
    MIME_TYPES.put(".jpg", "image/jpeg");
    MIME_TYPES.put(".jpeg", "image/jpeg");
}

@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
    // Implement this to handle requests to delete one or more rows.
    throw new UnsupportedOperationException("Not yet implemented");
}

@Override
public String getType(Uri uri) {
    String path = uri.toString();

    for (String extension : MIME_TYPES.keySet()) {
        if (path.endsWith(extension)) {
            return (MIME_TYPES.get(extension));
        }
    }
    return (null);
}

@Override
public Uri insert(Uri uri, ContentValues values) {
    // TODO: Implement this to handle requests to insert a new row.
    throw new UnsupportedOperationException("Not yet implemented");
}

@Override
public boolean onCreate() {
    try {
        File mFile = new File(getContext().getFilesDir(), "newImage.jpg");
        if(!mFile.exists()) {
            mFile.createNewFile();
        }
        getContext().getContentResolver().notifyChange(CONTENT_URI, null);
        return (true);
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }

}

@Override
public ParcelFileDescriptor openFile(Uri uri, String mode)
        throws FileNotFoundException {

    File f = new File(getContext().getFilesDir(), "newImage.jpg");
    if (f.exists()) {
        return (ParcelFileDescriptor.open(f,
                ParcelFileDescriptor.MODE_READ_WRITE));
    }
    throw new FileNotFoundException(uri.getPath());
}

@Override
public Cursor query(Uri uri, String[] projection, String selection,
                    String[] selectionArgs, String sortOrder) {
    // TODO: Implement this to handle query requests from clients.
    throw new UnsupportedOperationException("Not yet implemented");
}

@Override
public int update(Uri uri, ContentValues values, String selection,
                  String[] selectionArgs) {
    // TODO: Implement this to handle requests to update one or more rows.
    throw new UnsupportedOperationException("Not yet implemented");
}

}

Now, the problem is , the image I finally obtain in the ImageView is portrait , how to obtain it as landscape by default ?

You could easily rotate the portrait image and get a landscape one!

Matrix matrix = new Matrix();
matrix.postRotate(90);
Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap , 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM