JEP 251:多分辨率图像
概括
定义多分辨率图像 API,以便可以轻松操作和显示具有不同分辨率的图像。
描述
包中定义的新 APIjava.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 需要在配备 Retina 显示屏的 Mac OS X 和配备 HiDPI 显示屏的 Windows 上进行测试。
可以测试以下场景:
-
从一组图像创建多分辨率图像,
-
从文件系统上的图像创建多分辨率图像,遵循通常的缩放命名约定,
-
基于另一个多分辨率图像创建一个多分辨率图像,并且
-
使用不同的 DPI 指标和应用的变换绘制多分辨率图像。