Как получить Bitmap из ресурса по умолчанию для Android?

Привет, я делаю это, используя этот способ

Bitmap bm = BitmapFactory.decodeResource(getResources(), android.R.drawable.list_selector_background); int c = bm.getPixel(bm.getWidth()/2, bm.getHeight()/2); 

Но bm равно null что дает NullPointerException во второй строке.

Ошибка:

 02-12 18:29:57.568: E/AndroidRuntime(5086): at android.app.ActivityThread.access$600(ActivityThread.java:123) 02-12 18:29:57.568: E/AndroidRuntime(5086): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 02-12 18:29:57.568: E/AndroidRuntime(5086): at android.os.Handler.dispatchMessage(Handler.java:99) 02-12 18:29:57.568: E/AndroidRuntime(5086): at android.os.Looper.loop(Looper.java:137) 02-12 18:29:57.568: E/AndroidRuntime(5086): at android.app.ActivityThread.main(ActivityThread.java:4424) 02-12 18:29:57.568: E/AndroidRuntime(5086): at java.lang.reflect.Method.invokeNative(Native Method) 02-12 18:29:57.568: E/AndroidRuntime(5086): at java.lang.reflect.Method.invoke(Method.java:511) 02-12 18:29:57.568: E/AndroidRuntime(5086): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 02-12 18:29:57.568: E/AndroidRuntime(5086): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 02-12 18:29:57.568: E/AndroidRuntime(5086): at dalvik.system.NativeStart.main(Native Method) 02-12 18:29:57.568: E/AndroidRuntime(5086): Caused by: java.lang.NullPointerException 02-12 18:29:57.568: E/AndroidRuntime(5086): at com.example.showhide.MainActivity.onCreate(MainActivity.java:38) 02-12 18:29:57.568: E/AndroidRuntime(5086): at android.app.Activity.performCreate(Activity.java:4465) 02-12 18:29:57.568: E/AndroidRuntime(5086): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 02-12 18:29:57.568: E/AndroidRuntime(5086): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 

Это потому, что этот ресурс является StateListDrawable, а не Bitmap. Вы должны использовать:

  Drawable d = getResources().getDrawable(android.R.drawable.list_selector_background); 

Если вы уверены, что это растровое изображение, отбросьте его на BitmapDrawable и получите растровое изображение оттуда:

 Drawable currentState = d.getCurrent(); if(currentState instanceof BitmapDrawable) Bitmap b = ((BitmapDrawable)currentState).getBitmap(); 

Растровое изображение также может быть нулевым.

Вы должны использовать Resources.getSystem() вместо getResources

 Bitmap bm = BitmapFactory.decodeResource(Resources.getSystem(), android.R.drawable.list_selector_background); 

Поскольку ресурс, к которому вы пытаетесь получить доступ, находится не в ваших собственных ресурсах, а в системе.

Редактировать:

Рядом с неправильными ресурсами вы пытаетесь получить возможность извлечь из ресурса, который является селектором (xml-файл). Получите нужный ресурс: http://androidxref.com/4.1.1/xref/frameworks/base/core/res/res/drawable/list_selector_background.xml

Без использования BitmapFactory:

 Bitmap bmp = ((BitmapDrawable) context.getResources() .getDrawable(R.drawable.list_selector_background)).getBitmap();