跳到主要内容

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 指标和应用的变换绘制多分辨率图像。