0

我正在从我的相机中存储一张图片,如下所示:

String newName = new BigInteger(130, new SecureRandom())
                    .toString(24);
File mydir = new File(Environment.getExternalStorageDirectory().getAbsolutePath(),
                    CameraActivity.DIR_PICTURES);
mydir.mkdirs();
fileWithinMyDir = new File(mydir, newName + ".png");
out = new FileOutputStream(fileWithinMyDir);
finalBitmap.compress(Bitmap.CompressFormat.PNG, 100, out);

哪里CameraActivity.DIR_PICTURES代表"com.korcholis.testapp/pictures"。在我看来,没什么特别的。当我尝试获取有关此图像的一些信息时,问题就来了。我的代码中的其他地方:

Uri selectedImage = Uri.fromFile(new File(sample.getPicture()));
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
mediaScanIntent.setData(selectedImage);
getSherlockActivity().sendBroadcast(mediaScanIntent); //Now it's in the Gallery
selectedImage = Uri.parse("content://"+(new File(sample.getPicture()).toString()));
String[] filePathColumn = {MediaStore.Images.ImageColumns.ORIENTATION};
Cursor cursor = getSherlockActivity().getContentResolver().query(selectedImage, filePathColumn, null, null, null);
if(cursor != null)
{
    cursor.moveToFirst();
    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
    String filePath = cursor.getString(columnIndex);
    Log.i("ImageTest", cursor.getString(columnIndex));
    cursor.close();
}
else
{
    Log.i("ImageTest", selectedImage .toString());
}

else 日志返回,这content:///storage/emulated/0/com.korcholis.testapp/pictures/1aaf2e587kg519cejk88ch6hle372.png是正常的,但是光标nullcursor.moveToFirst()。看起来光标找不到图像。但是,当通过文件管理器进入存储时,图像很容易在正确的文件夹中找到。我还检查了使用时该文件是否确实存在file://,并且确实存在。我究竟做错了什么?

编辑 5/8/2013: 我一直在寻找解决方案,但这看起来是不可能的。我在其他线程中读到file://Uri 不足以寻找 using getContentResolver(),所以我尝试使用 using content://。尽管我做出了努力,但这并没有像预期的那样顺利。我将最后一个代码块编辑为我正在使用的当前代码。我什至尝试将它添加到图库中,因此它可以算作“已解决的内容列表”中的一个项目。

4

1 回答 1

1

而不是使用光标,因为您只需要找到一个图像的方向,您可以这样做:

ExifInterface exif = new ExifInterface(selectedImage);
exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1);
if(orientation == 3 || orientation == 6 || orientation == 8 ){ 
   Matrix matrix = new Matrix(); 
   if (orientation == 6)
      matrix.postRotate(90); 
   else if (orientation == 3)
      matrix.postRotate(180);  
   else if (orientation == 8)
      matrix.postRotate(270);
   result = Bitmap.createBitmap(result, 0, 0, result.getWidth(), result.getHeight(), matrix, true); // rotating bitmap 
}
于 2013-05-13T10:19:14.007 回答