Java动画透明闪屏

时间:2013-08-01 13:51:49

标签: java transparency animated-gif

我想用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的背景而没有成功。

请帮忙!

1 个答案:

答案 0 :(得分:0)

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

自Java 7发布以来,一种名为setShape(Shape)的新方法;出现在Window对象中。如果您的动画GIF具有固定的透明度“区域”,我建议您创建一个自定义的java.awt.Shape对象,在该对象中通过set 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对象here

N.B。 Shape“object”实际上是一个接口,要么使用其中一个实现子类,要么创建自己的接口。