2015-03-09 13 views
3

У меня возникают проблемы при декодировании изображений на устройствах Lollipop.Проблемы с декодированием растровых изображений с Android Lollipop

На рисунке ниже показано «приложение для тестирования», которое декодирует 4 файла png.

Left = KitKat 4.4.4, справа = леденец на палочке (5.0.1)

И в то же типа устройства: MOTO G второго поколения.

enter image description here

Соответствующий код:

Options options = new BitmapFactory.Options(); 
options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
options.inDither = true; 
options.inScaled = true; 
options.inDensity = 160; 
options.inTargetDensity = 320; 
Bitmap bmp = BitmapFactory.decodeStream(new ByteArrayInputStream(imageAsBytes), null, options); 

Метрики экрана:

Density......: 2 
ScaledDensity: 2 
DensityDPI...: 320 
Size.........: 720x1184 

Я нашел каких-либо объяснений в Интернете.

Любой может указать мне, почему это происходит?

EDIT:

Как это происходит только с леденцом + TargetDensity = 320 + Плотность = 160, я сделал следующее временное решение:

if ((android.os.Build.VERSION.SDK_INT >= 21) && (options.inTargetDensity == 320) && (options.inDensity = 160)) 
{ 
    options.inDensity = options.inTargetDensity; 
} 

Но я действительно ценю некоторые советы, чтобы Figer его вне что происходит ...

+0

Привет, христианин. Вы нашли решение в промежутке времени. У меня точно такая же проблема? chris @ guruk.com –

+0

Просто обходной путь. Проверьте вопрос на редактирование ... ура. – Christian

+0

спасибо ... это очень странно. Кажется, это не просто мото. вместо этого несколько моторов. Мне интересно, почему никто больше не писал. –

ответ

0

Решение Решение в моем случае было (добавить setDensity и использовать новый BitmapDrawable, который выглядит на Плотность). Надеюсь, это также поможет и вам. (кстати, это 2 линии, стоило мне 3 дня :)

final Bitmap output = Bitmap.createBitmap(44, 65, Bitmap.Config.ARGB_8888); 

/*NEW -> */ output.setDensity(320); 

final Canvas canvas = new Canvas(output); 
final int color = Color.RED; 
final Paint paint = new Paint(); 

// BitmapDrawable bmd = new BitmapDrawable(output); 
/*Change into*/ 
BitmapDrawable bmd = new BitmapDrawable(Resources.getSystem(),output); 
+0

Будет ли это прерываться, если вы работаете в «старых» устройствах? Как Android 2.3 с экранами lowres? – Christian

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