我已经设置了一种方法,用于将图像加载到ByteBuffer并调用Display.setIcon()
,这可以...部分工作。这将设置任务栏的图标,但将窗口的图标保留为默认的LWJGL图标。我需要调用另一种Display
方法吗?或者这与windows有关。
以下是根据需要加载图标的方法:
public static final ByteBuffer[] getIcon()
{
Image image = Toolkit.getDefaultToolkit().getImage("rw_icon.PNG");
MediaTracker tracker = new MediaTracker(new JPanel());
tracker.addImage(image, 0);
try
{
tracker.waitForAll();
}
catch(InterruptedException e)
{
e.printStackTrace();
}
tracker.removeImage(image);
BufferedImage bufImage = new BufferedImage(32, 32, BufferedImage.TYPE_4BYTE_ABGR);
Graphics2D graphics = bufImage.createGraphics();
graphics.drawImage(image, 0, 0, null);
graphics.dispose();
image.flush();
ByteBuffer buffer = ByteBuffer.allocateDirect(32*32*4);
buffer.clear();
byte[] bufferData = (byte[])bufImage.getRaster().getDataElements(0, 0, 32, 32, null);
buffer.put(bufferData);
buffer.rewind();
return (new ByteBuffer[] {buffer});
}
答案 0 :(得分:1)
否强>
您只需将图标的两个版本(16x16,32x32)的数组传递给setIcon(..)方法。
好像你误解了ByteBuffer []。您应该传递一组不同的 ByteBuffers。不只是一个包含一个元素的ByteBuffer数组。因此,最好创建一个新方法,它基本上只是执行你的getIcon()方法所做的,但是需要一个String作为文件路径。这样您就可以轻松创建真实的图标字节缓冲区数组。
public static int setIcon(java.nio.ByteBuffer [] icons)
为人机界面设置一个或多个图标。 在Windows上,您应该提供至少一个 16x16图标和一个32x32 。 Linux(和类似的平台)期待一个 32x32图标。 Mac OS X应该提供一个128x128图标 实现将使用提供的ByteBuffers和图像数据 RGBA(大小必须是2的幂)并执行任何转换 特定平台的nescesarry。 注意:显示屏将显示 提供字节缓冲区数组的深层副本,用于 在来回全屏模式时重新创建图标。您 因此,每个实例只需要设置一次图标。
http://lwjgl.org/javadoc/org/lwjgl/opengl/Display.html#setIcon(java.nio.ByteBuffer[])