сохранение повернутого растрового изображения на андроид - PullRequest
0 голосов
/ 01 марта 2011

(Простите, если я все понял неправильно, я новичок) Я показываю несколько фотографий, сделанных с MediaStore.ACTION_IMAGE_CAPTURE. Я пытался отключить автоориентацию при съемке, но она не работает, я использовал

putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION,ActivityInfo.SCREEN_ORIENTATION_NOSENSOR)

Это заставило меня повернуть некоторые из сделанных фотографий. Затем я сохраняю эти фотографии на SDCARD. Моя проблема в том, что я не хочу поворачивать их каждый раз, когда пользователь загружает фотографию. Я попробовал этот код, чтобы создать новое растровое изображение, которое будет сохранено в «повернутом» состоянии. Он работал на эмуляторе, но вылетает на моем HTC. Я предполагаю, что это проблема с памятью. Есть ли способ сделать это эффективно? А еще лучше, есть ли способ действительно отключить автоориентацию при съемке фотографий с помощью Camera Intent?

tempBitmap=BitmapFactory.decodeFile(dirPath+filename+".jpg");
int tempW = tempBitmap.getWidth();
int tempH = tempBitmap.getHeight();

if (tempW>tempH) {
     Matrix mtx = new Matrix();
     mtx.postRotate(90);
     Bitmap rotatedBitmap = Bitmap.createBitmap(Bitmap.createBitmap(tempBitmap, 0, 0, 
                                                         tempW, tempH, mtx, true));

} else{
  //...
}

Ответы [ 3 ]

1 голос
/ 10 мая 2012

То же, что и выше, но он забыл какой-то код в последней строке

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4; //1/4 of the original image

tempBitmap=BitmapFactory.decodeFile(dirPath+filename+".jpg", options);
int tempW = tempBitmap.getWidth();
int tempH = tempBitmap.getHeight();

if (tempW>tempH) {
Matrix mtx = new Matrix();
mtx.postRotate(90);
Bitmap rotatedBitmap = **Bitmap.createBitmap**(tempBitmap, 0,0,tempW, tempH, mtx, true);
0 голосов
/ 18 января 2016

Пройдите по следующему коду,

Для остановки изображения используйте следующий код -

private int getImageOrientation() 
{
    final String[] imageColumns = {MediaStore.Images.Media._ID, MediaStore.Images.ImageColumns.ORIENTATION};
    final String imageOrderBy = MediaStore.Images.Media._ID + " DESC";
    Cursor cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            imageColumns, null, null, imageOrderBy);

    if (cursor.moveToFirst()) {
        int orientation = cursor.getInt(cursor.getColumnIndex(MediaStore.Images.ImageColumns.ORIENTATION));
        System.out.println("orientation===" + orientation);
        cursor.close();
        return orientation;
    } else {
        return 0;
    }
}

Если у вас возникли проблемы, пожалуйста, перейдите по ссылке

http://androidlift.info/2016/01/07/android-camera-image-capturing-and-uploading-to-php-server/

0 голосов
/ 09 августа 2011

попытайтесь уменьшить изображение, с которым вы работаете, может быть проблема с памятью. См. Ниже возможное решение.

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4; //1/4 of the original image

tempBitmap=BitmapFactory.decodeFile(dirPath+filename+".jpg", options);
int tempW = tempBitmap.getWidth();
int tempH = tempBitmap.getHeight();

if (tempW>tempH) {
    Matrix mtx = new Matrix();
    mtx.postRotate(90);
    Bitmap rotatedBitmap = (tempBitmap, 0,0,tempW, tempH, mtx, true);
...