保存旋转的Bitmap android

时间:2011-02-28 22:21:14

标签: android bitmap camera android-intent rotation

(如果我完全错了,请原谅我,我是新手) 我正在显示一些使用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 个答案:

答案 0 :(得分:1)

与上面相同,但他忘记了最后一行的一些代码

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);

答案 1 :(得分:0)

尝试减少使用它的图像可能是内存问题。请参阅下面的可能解决方案。

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);

答案 2 :(得分:0)

通过以下代码

使用以下代码停止使用图像 -

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/