Skip to content

JEP 251: Multi-Resolution Images | 多分辨率图像

摘要

定义一个多分辨率图像 API,以便可以轻松地操作和显示具有分辨率变体的图像。

描述

新的 API 将在 java.awt.image 包中定义,它允许将一组具有不同分辨率的图像封装为单个多分辨率图像。

多分辨率图像的基本操作是:

  • 基于给定的 DPI 指标和一组图像转换,检索特定分辨率的图像变体,并

  • 检索图像中的所有变体。

除了这些操作,多分辨率图像在其他方面的行为与普通图像相同。java.awt.Graphics 类将根据当前显示的 DPI 指标和任何应用的变换从多分辨率图像中获取必要的变体。

建议的 API 草图:

java
package java.awt.image;

/**
 * 此接口旨在提供各种分辨率的一组图像。
 *
 * MultiResolutionImage 接口应由任何其实例旨在根据给定的图像宽度和高度提供图像分辨率变体的类来实现。
 *
 * @since 1.9
 */
public interface MultiResolutionImage {

    /**
     * 获取一个特定的图像,它是表示此逻辑图像的最佳变体,大小与指定的大小相同。
     *
     * @param destImageWidth 目标图像的宽度(以像素为单位)。
     * @param destImageHeight 目标图像的高度(以像素为单位)。
     * @return 图像分辨率的变体。
     *
     * @since 1.9
     */
    Image getResolutionVariant(float destImageWidth, float destImageHeight);

    /**
     * 获取所有分辨率变体的可读列表。
     * 注意,许多实现可能会返回一个不可修改的列表。
     *
     * @return 分辨率变体的列表。
     * @since 1.9
     */
    public List<Image> getResolutionVariants();
}

替代方案

在当前的 Java 2D API 中,无法检测是否正在使用高分辨率显示器。至少需要提供 DPI 缩放因子。开发人员可以使用缩放因子绘制具有必要分辨率的图像,但这可能非常繁琐。

测试

新的 API 需要在具有 Retina 显示器的 Mac OS X 上和具有 HiDPI 显示器的 Windows 上进行测试。

可以测试以下场景:

  • 从一组图像创建多分辨率图像,

  • 根据文件系统上遵循通常缩放命名约定的图像创建多分辨率图像,

  • 基于另一个多分辨率图像创建多分辨率图像,并

  • 使用不同的 DPI 指标和应用转换绘制多分辨率图像。