我正在存储相机中的照片:
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());
}
其他日志会返回content:///storage/emulated/0/com.korcholis.testapp/pictures/1aaf2e587kg519cejk88ch6hle372.png
,这是正常的,但光标位于null
cursor.moveToFirst()
。看起来光标无法找到图像。但是,通过文件管理器进入存储时,可以在正确的文件夹中轻松找到该图像。我还检查过使用file://
时文件确实存在,而且确实存在。我做错了什么?
编辑5/8/2013:
我一直在寻找解决方案,但这看起来不可能。我已经在其他帖子中读到file://
使用getContentResolver()
找不到足够好的Uri,所以我尝试使用content://
。尽管我付出了努力,但这并没有达到预期的效果。我编辑了我正在使用的当前代码的最后一个代码块。我甚至尝试将其添加到图库中,因此它可以算作“已解析内容列表”中的项目。
答案 0 :(得分: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
}