2013-08-20 2 views
0

Мне нужно уменьшить мои изображения (+ - 2500 пикселей на одну сторону), чтобы показать их на моих устройствах в моем приложении. Но у меня есть одна проблема. Если я уменьшаю изображения с моим кодом (немного дальше вниз), изображения отображаются, но сторона отключается. Высота изображения отлично с моим кодом. Я разукрупнение мои изображения с этим кодом:Уменьшение масштаба изображения и его полное отображение

static public Bitmap scaleToFill(Bitmap b, int width, int height) { 
    float factorH = height/(float) b.getWidth(); 
    float factorW = width/(float) b.getWidth(); 
    float factorToUse = (factorH > factorW) ? factorW : factorH; 
    return Bitmap.createScaledBitmap(b, (int) (b.getWidth() * factorToUse), (int) (b.getHeight() * factorToUse), false); 
} 

Высота и ширина я получаю с этим:

 WindowManager wm = (WindowManager) getActivity().getSystemService(Context.WINDOW_SERVICE); 
    Display display = wm.getDefaultDisplay(); 
    Point size = new Point(); 
    display.getSize(size); 
    int width = size.x; 
    int height = size.y; 

Изображение рассматривается в ImageView с ScaleType CENTER_CROP. Надеюсь, кто-то может мне помочь! Заранее спасибо!

+0

Вы пытались установить 'CENTER_INSIDE' на ImageView вместо' CENTER_CROP'? – Jave

+0

Jave, это может сработать, но если изображение нужно сделать большим, то оно больше не будет работать. – Marc

+0

Почему это не работает? Изображение не изменяет размер исходного файла. Единственное, что делает «CENTER_INSIDE», это убедиться, что отображаемое изображение соответствует изображению, сохраняя при этом его пропорции. – Jave

ответ

0

В макете файл - вид внутри изображений

<ImageView 
android:scaleType="fitXY" 
/> 

try with thsi code. 
+0

Да, но мне нужно сохранить масштаб моего изображения. Поэтому я не могу использовать это. – Marc

0

этот вопрос гораздо более общие, чем вы думаете. он не имеет ничего общего с уменьшением масштаба или андроидом.

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

такая же проблема возникает на телевизорах, где соотношение сторон экрана отличается от того, которое было отправлено на него.

Существует также экспериментальный способ изменения размера изображений (seam carving), но он не всегда хорошо работает и зависит от самого изображения.

Кстати, способ, которым вы уменьшаете масштаб, очень неэффективен, так как он использует большую память (сначала вы декодируете исходное растровое изображение, а затем создаете новый, который является масштабированной версией исходного растрового изображения). вы должны попробовать либо google's way, либо my way.

+0

Я посмотрел на ваш способ сделать это, он выглядит хорошо. Но что мне нужно заполнить в sampleSize? Нужно ли его вычислять? Если да, то как? – Marc

+0

Просто потому, что изображение должно оставаться четким (не размытым) на даже 10-дюймовых устройствах. – Marc

+0

размер выборки должен быть рассчитан. это правда. номер должен сообщить алгоритму, сколько вам нужно, чтобы уменьшить масштаб растрового изображения. например, если вы установите его на 2, а изображение 1000x1000, выход будет равен 500x500. вы можете найти алгоритм для расчета размера выборки здесь: http://developer.android.com/training/displaying-bitmaps/load-bitmap.html#load-bitmap. о втором сообщении, которое вы написали, я не понимаю ... обратите внимание, что мой метод может быть немного медленнее, чем путь Google, но вы можете заставить его работать даже с фракциями вместо целых чисел (не поддерживается, но возможно) , –

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