2017-01-28 2 views
2

Как читать байты с определенного изображения mipmap? Например, я пытаюсь прочитать байты из ic_launcher.png, что находится в MIPMAP-xxhdpiЧтение ресурса mipmap для определенной плотности

enter image description here

Вот что я пытаюсь сделать:

InputStream ins = getResources(). 
      openRawResource(getResources(). 
        getIdentifier("ic_launcher.png", 
      "mipmap-xxhdpi", getPackageName())); 

Но я получаю исключение, говоря, что ресурс не найден. Каков правильный способ сделать это? Я хочу, чтобы прочитать файл в MIPMAP-xxhdpi особенно

+0

Могу ли я спросить: зачем вам нужно знать размер этого файла? –

+0

Я знаю размер этого файла ... Моя задача - прочитать определенные байты из этого конкретного файла (а не другие файлы ic_launcher.png) –

+0

https://developer.android.com/guide/practices/screens_support.html – siva35

ответ

5

вы можете получить, что конкретную вытяжку для xxhdpi с

ResourcesCompat.getDrawableForDensity(getResources(), R.mipmap.ic_launcher, DisplayMetrics.DENSITY_XXHIGH, getTheme()); 

после того, что вы могли бы сделать растровое изображение компресс его обратно в детские

Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); 
drawable.draw(new Canvas(bitmap)); 

ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); 
byte[] pngBytes = stream.toByteArray(); 
+0

Это помогает. Мой минимальный уровень API - 15, любой другой способ добиться того же? –

+0

это должно быть хорошо с api 15, возможно, вы вызываете getDrawableForDensity (int, int, Resources.Theme), для чего требуется api 21 – lelloman

+1

Для поддержки API 15 используйте 'ResourcesCompat.getDrawableForDensity (getResources(), R.mipmap.ic_launcher, 480, getTheme()); '. Согласно https://developer.android.com/reference/android/util/DisplayMetrics.html#DENSITY_XXHIGH, 'DENSITY_XXHIGH' является постоянным значением 480. –

Смежные вопросы