JEP 251: Multi-Resolution Images
Изображения с несколькими разрешениями
| Authors | Alexander Scherbatiy, Jim Graham |
| Ответственный | Alexandr Scherbatiy |
| Тип | Feature |
| Область | SE |
| Статус | Closed / Delivered |
| Выпуск | 9 |
| Компонент | client-libs / 2d |
| Обсуждение | 2d dash dev at openjdk dot java dot net |
| Трудоёмкость | M |
| Длительность | M |
| Рецензенты | Jim Graham, Philip Race |
| Одобрен | Kevin Rushforth |
| Создан | 2014/06/05 08:23 |
| Обновлён | 2017/06/28 15:07 |
| Задача | 8046010 |
Аннотация
Определить API для изображений с несколькими разрешениями, чтобы изображения с вариантами для разных разрешений можно было легко обрабатывать и отображать.
Описание
Новый API, который будет определён в пакете java.awt.image, позволит объединить набор изображений с разными разрешениями в одно изображение с несколькими разрешениями.
Основные операции над изображением с несколькими разрешениями:
-
получение варианта изображения для конкретного разрешения по заданной метрике DPI и набору преобразований изображения;
-
получение всех вариантов изображения.
Во всём остальном, помимо этих операций, изображение с несколькими разрешениями будет вести себя так же, как обычное изображение. Класс java.awt.Graphics будет получать нужный вариант из изображения с несколькими разрешениями по текущей метрике DPI дисплея и применённым преобразованиям.
Предлагаемый набросок API:
package java.awt.image;
/**
* This interface is designed to provide a set of images at various resolutions.
*
* The {@code MultiResolutionImage} interface should be implemented by any
* class whose instances are intended to provide image resolution variants
* according to the given image width and height.
*
* @since 1.9
*/
public interface MultiResolutionImage {
/**
* Gets a specific image that is the best variant to represent
* this logical image at the indicated size.
*
* @param destImageWidth the width of the destination image, in pixels.
* @param destImageHeight the height of the destination image, in pixels.
* @return image resolution variant.
*
* @since 1.9
*/
Image getResolutionVariant(float destImageWidth, float destImageHeight);
/**
* Gets a readable list of all resolution variants.
* Note that many implementations might return an unmodifiable list.
*
* @return list of resolution variants.
* @since 1.9
*/
public List<Image> getResolutionVariants();
}
Альтернативы
В текущем Java 2D API нельзя определить, используется ли дисплей с высоким разрешением. Как минимум должен предоставляться коэффициент масштабирования DPI. Разработчики могли бы использовать коэффициент масштабирования, чтобы рисовать изображение с нужным разрешением, но это может быть очень утомительно.
Тестирование
Новый API нужно будет протестировать на Mac OS X с дисплеем Retina и на Windows с дисплеем HiDPI.
Можно протестировать следующие сценарии:
-
создание изображения с несколькими разрешениями из набора изображений;
-
создание изображения с несколькими разрешениями из изображений в файловой системе, названных по обычным соглашениям об именовании для масштабирования;
-
создание изображения с несколькими разрешениями на основе другого изображения с несколькими разрешениями;
-
отрисовка изображений с несколькими разрешениями с разными метриками DPI и применённым преобразованием.