Как я могу отображать масштабированные изображения без потери четкости? - PullRequest
0 голосов
/ 12 октября 2011

Мне нужно отобразить миниатюрные изображения для моего ListView с полным изображением на подробном экране.

Я использую одно и то же изображение для двух макетов.Вот мой элемент списка <ImageView>:

<ImageView android:layout_height="50dip"                             
    android:layout_width="50dip" 
    android:id="@+id/item_view_img" 
    android:scaleType="fitXY">
</ImageView>

Вот мой детальный просмотр <ImageView>:

<ImageView android:id="@+id/update_details_img"
    android:layout_width="289dip" android:layout_height="206dip"
    android:src="@drawable/q_silhouette" android:paddingTop="10dp"
    android:scaleType="fitXY" android:gravity="center">                                     
</ImageView>

Исходный размер изображения составляет около 300x360.Ни один из моих изображений не выглядит хорошо.Как я могу показать эти изображения без потери четкости?

Ответы [ 2 ]

2 голосов
/ 13 октября 2011

Этот вопрос не столько вопрос Android, сколько вопрос 2D-графики.В настоящее время есть много гуру графики, которые пытаются решить именно вашу проблему.

Невозможно изменить размеры изображения без потери точности оригинала.Вопрос на самом деле заключается в том, приводит ли эта потеря в точности к потере ясности.Чаще всего ответ таков: верность снижается, а ясность тоже.Однако существует множество способов смягчить это.

Как правило, вы можете уменьшить изображение примерно до 1/2 исходного размера без артефактов.После того, как это выполнено, вы часто можете уменьшить размер еще раз в зависимости от сложности изображения (количества цветов).

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

Однако все ставки отключены, если вы измените соотношение сторон.Это потому, что это будет искажать изображение другими способами.В Android вы можете избежать изменения соотношения сторон в XML, установив для атрибута scaleType значение centerInside.Это значительно поможет и удержит изображение в границах.Особенно это следует делать для миниатюры ImageView, если только вы не собираетесь установить такое же соотношение сторон, как у детального ImageView.

1 голос
/ 12 октября 2011

Поскольку вы изменяете отношения с помощью этих различных ImageViews, вы можете масштабировать с помощью centerInside или centerCrop.

...