Android MediaStore获取图像高度/宽度
我正在查询Android MediaStore获取图像高度/宽度,android,mediastore,android-mediascanner,Android,Mediastore,Android Mediascanner,我正在查询MediaStore.Images.Media.EXTERNAL\u CONTENT\u URI,查询工作正常。我能够从每一列中获取数据,该列有一个常数,例如: currentImage.ImageUrl = imagecursor.getString(imagecursor.getColumnIndex(MediaStore.Images.Media.DATA)); currentImage.Lat = imagecursor.getString(imagec
MediaStore.Images.Media.EXTERNAL\u CONTENT\u URI
,查询工作正常。我能够从每一列中获取数据,该列有一个常数,例如:
currentImage.ImageUrl = imagecursor.getString(imagecursor.getColumnIndex(MediaStore.Images.Media.DATA));
currentImage.Lat = imagecursor.getString(imagecursor.getColumnIndex(MediaStore.Images.Media.LATITUDE));
currentImage.Long = imagecursor.getString(imagecursor.getColumnIndex(MediaStore.Images.Media.LONGITUDE));
宽度/高度列没有常量(没有MediaStore.Images.Media.width
),因此我尝试使用imagecursor.getLong(imagecursor.getColumnIndex(“width”))访问它们代码>
试图使用getLong、getString、getInt。。。没什么-总是一样的碰撞
这是堆栈:
02-22 19:38:26.242: E/AndroidRuntime(1607): FATAL EXCEPTION: main
02-22 19:38:26.242: E/AndroidRuntime(1607): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.MEDIA_SCANNER_FINISHED dat=file:///mnt/sdcard flg=0x10 } in com.Activity.android.chat.service.ChatService$ChatServiceReceiver@415b26c0
02-22 19:38:26.242: E/AndroidRuntime(1607): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:737)
02-22 19:38:26.242: E/AndroidRuntime(1607): at android.os.Handler.handleCallback(Handler.java:605)
02-22 19:38:26.242: E/AndroidRuntime(1607): at android.os.Handler.dispatchMessage(Handler.java:92)
02-22 19:38:26.242: E/AndroidRuntime(1607): at android.os.Looper.loop(Looper.java:137)
02-22 19:38:26.242: E/AndroidRuntime(1607): at android.app.ActivityThread.main(ActivityThread.java:4424)
02-22 19:38:26.242: E/AndroidRuntime(1607): at java.lang.reflect.Method.invokeNative(Native Method)
02-22 19:38:26.242: E/AndroidRuntime(1607): at java.lang.reflect.Method.invoke(Method.java:511)
02-22 19:38:26.242: E/AndroidRuntime(1607): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
02-22 19:38:26.242: E/AndroidRuntime(1607): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
02-22 19:38:26.242: E/AndroidRuntime(1607): at dalvik.system.NativeStart.main(Native Method)
02-22 19:38:26.242: E/AndroidRuntime(1607): Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
02-22 19:38:26.242: E/AndroidRuntime(1607): at android.database.CursorWindow.nativeGetLong(Native Method)
02-22 19:38:26.242: E/AndroidRuntime(1607): at android.database.CursorWindow.getLong(CursorWindow.java:515)
02-22 19:38:26.242: E/AndroidRuntime(1607): at android.database.CursorWindow.getInt(CursorWindow.java:582)
02-22 19:38:26.242: E/AndroidRuntime(1607): at android.database.AbstractWindowedCursor.getInt(AbstractWindowedCursor.java:69)
02-22 19:38:26.242: E/AndroidRuntime(1607): at android.database.CursorWrapper.getInt(CursorWrapper.java:102)
02-22 19:38:26.242: E/AndroidRuntime(1607): at com.Activity.android.chat.service.ChatService.getUserImages(ChatService.java:251)
02-22 19:38:26.242: E/AndroidRuntime(1607): at com.Activity.android.chat.service.ChatService.access$1(ChatService.java:209)
02-22 19:38:26.242: E/AndroidRuntime(1607): at com.Activity.android.chat.service.ChatService$ChatServiceReceiver.onReceive(ChatService.java:204)
02-22 19:38:26.242: E/AndroidRuntime(1607): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:728)
02-22 19:38:26.242: E/AndroidRuntime(1607): ... 9 more
如果您能帮上忙,我将不胜感激。。。我不知道我还能尝试什么
谢谢大家! 好像你没打电话来
try {
Bitmap _bitmapPreScale = BitmapFactory.decodeFile(imagePath);
int oldWidth = _bitmapPreScale.getWidth();
int oldHeight = _bitmapPreScale.getHeight();
}catch(Exception e){
e.printstacktrace();
}
在访问光标数据之前。解决方案(愚蠢的错误…):
我没有在投影中包括宽度和高度列。。。
我不明白谷歌为什么不给他们常数来避免所有这些混乱,但无论如何,解决办法是添加它们
final String[] columns = {
MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA, MediaStore.Images.Media.TITLE, MediaStore.Images.Media.DATE_TAKEN,
MediaStore.Images.Media.SIZE, MediaStore.Images.Media.LATITUDE, MediaStore.Images.Media.LONGITUDE, "width", "height"
};
我确实。。。不是这样。不过还是要谢谢你;)谢谢,但是这个手术对我来说太贵了。。。运行1000个图像并对每个图像进行解码是我想要避免的事情,特别是当mediastore中存在with和height列时。images DBI也有同样的问题,并使用了此代码。但它给出了错误:“没有这样的列:宽度”。。。你能帮帮我吗?@Farid Ala当然!我认为“宽度”和“高度”列仅在Android 3.0及以上版本上可用,因此如果您试图在较低的Android版本上访问它们,它将给您“无此类列”错误。您可以使用根资源管理器->数据->数据->com.android.providers.media->数据库->external.db->图像打开mediaStore数据库,检查是否有这些列。感谢您的回复。你说得对,它只在Android 3.0+上可用。那么,我如何在Android 3.0-上获得图像大小?我需要使用Samir的解决方案吗?正如你提到的,有点贵。我真的很困惑。@Farid Ala这有点贵,但是你可以使用Samir的代码构建自己的对象来保存所有图像信息,包括身高和体重,然后用新对象填充列表(getView)。这样,昂贵的操作将发生在列表适配器的getView之外,列表将滚动得更平滑。实际上,我的应用程序使用AndEngine,我将通过sprite显示图像。这条线对我帮助很大。谢谢:-)