1

我想制作一个带有动画 gif 的启动画面。我的动画 gif 具有透明背景,因此我只想将 gif 的可见部分显示为启动屏幕。首先,我必须指定我正在使用 Matlab,因此不可能(或者我还没有找到如何)覆盖组件/功能。这是我的示例代码:

 win = javax.swing.JWindow;
 jl = javax.swing.JLabel(javax.swing.ImageIcon('C:\Users\ME\Documents\loader512-.gif'));
 win.getContentPane.add(jl);
 win.setAlwaysOnTop(true);
 win.pack;
 %% set the splash image to the center of the screen
 screenSize = win.getToolkit.getScreenSize;
 screenHeight = screenSize.height;
 screenWidth = screenSize.width;
 % get the actual splashImage size
 imgHeight = 512;
 imgWidth = 512;
 win.setLocation((screenWidth-imgWidth)/2,(screenHeight-imgHeight)/2);   
 win.show

它可以很好地显示图像,但是它的背景是以太白色或灰色,具体取决于窗口的透明度。我也尝试过使用 JLabel 的背景,但没有成功。

请帮忙 !

4

1 回答 1

1

您的代码的问题是每个给定的窗口都有一个特定的定义形状。在不改变形状的情况下,每个 Window 对象都有一个矩形画布,它可以在其中绘制。仅当您在 GIF 图像后面绘制对象时,透明度才适用。如果启用了透明度,则渲染器仅绘制背景颜色(通常为黑色或白色或一些浅灰色),如果没有其他内容。

自 Java 7 发布以来,一个名为 setShape(Shape) 的新方法;出现在 Window 对象中。如果您的动画 GIF 有一个固定的透明度“区域”,我建议您创建一个自定义 java.awt.Shape 对象,您可以在其中通过设置形状传递给 win 对象。

例子:

win = javax.swing.JWindow;
jl = javax.swing.JLabel(javax.swing.ImageIcon('C:\Users\ME\Documents\loader512-.gif'));
win.getContentPane.add(jl);
Shape S = createCustomShape(); //Create your shape
win.setShape(S);
win.setAlwaysOnTop(true);
//{rest of code...}

如果动画 GIF 具有不断变化的透明度背景,则必须创建一个复杂的实现,其中 Shape 对象逐帧更新以响应 GIF。在我看来,如果是这样的话,我不会打扰。:)

在此处阅读有关 Shape 对象的更多信息。

注意 Shape“对象”实际上是一个接口,要么使用实现子类之一,要么创建你自己的。

于 2013-08-01T19:19:32.757 回答