视网膜显示器上的摆动和位图

Ced*_*tin 6 java icons swing pixel retina-display

我有一个Java桌面应用程序,可以在OS X上运行.

现在新的MacBook Pro有一个视网膜显示器,我担心:它如何适用于Swing?

当Java应用程序同时使用Swing组件和一些位图图形(如自定义图标/ ImageIcon)时怎么样?

是否应自动调整所有桌面Java应用程序的大小(例如,将每个像素增加四倍)或者我需要创建两个版本的图标集(例如,一个具有24x24图标,另一个具有96x96图标)并以某种方式确定应用程序在视网膜显示器上运行?

Kon*_*kov 7

使用IconLoader库.它支持HiDPI图像http://bulenkov.com/iconloader/它还提供了一种使用HiDPI图像的方法(绘图等)


hen*_*rik 5

在Apple的Java 6中,您可以提供同一图像的多个版本。根据屏幕(是否为视网膜),选择并绘制一个或另一个图像。

但是,这些图像必须以特殊方式加载:

Toolkit.getDefaultToolkit().getImage("NSImage://your_image_name_without_extension");
Run Code Online (Sandbox Code Playgroud)

例如,如果您的(常规分辨率)图像称为:“ scissor.png”,则必须创建高分辨率版本“ scissor@2x.png”(遵循Apple命名约定),并将这两个图像都放置在Resources您的目录中应用程序捆绑包(是的,您需要捆绑您的应用程序)。然后致电:

Image img = Toolkit.getDefaultToolkit().getImage("NSImage://scissor");
Run Code Online (Sandbox Code Playgroud)

您可以在按钮中使用生成的图像,然后以正确的分辨率神奇地绘制它。

您还可以使用另外两个“技巧”:

  1. 在绘制图像之前,在Graphics2D对象上使用(0.5,0.5)的AffineTransform。另请参阅此java-dev消息
  2. 使用此技巧以编程方式创建图像的高dpi版本

现在,第一个“技巧”(0.5缩放)也可以在Oracle的Java 7/8上使用。即,如果您直接以0.5比例绘制图像到组件的Graphics对象,它将在Retina显示器上以高分辨率呈现(并且原始大小的一半)。


om-*_*nom 0

我的 Retina MacBook '12 上的图标如下所示:

在此输入图像描述

左侧是 IntelliJ IDEA 11(swing 应用程序)的图标,右侧是据称已视网膜化的 IDEA 12 。正如您所看到的,自动调整大小的图标(左侧)看起来非常难看。

据我所知,他们就像 Chrome 团队的人一样,通过提供双倍大小的图标来实现这一点。