Java动画透明启动屏幕

Java动画透明启动屏幕,java,transparency,animated-gif,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.ad

我想用动画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的背景下玩,但没有成功


请帮忙

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

自从Java7发布以来,出现了一种称为setShape(Shape)的新方法;为窗口对象显示。如果你的动画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具有不断变化的透明度背景,则必须创建一个复杂的实现,在该实现中,形状对象会逐帧更新以响应GIF。在我看来,如果是这样的话,我就不麻烦了

阅读有关形状对象的详细信息


注意:形状“object”实际上是一个接口,可以使用其中一个实现子类,也可以创建自己的子类。

谢谢!但是setShape显然不被认为是类javax.swing.JWindow的一部分(我运行Java 8)。我刚刚意识到Matlab使用Java 6,并且很难更新到Java 7,因为它使用JVM,并且Matlab中存在一些与Java 7相关的问题/错误。@G_a Well。。。这可能不太理想。。。但是有一个类叫做AWTUtilities,它有一个静态的设置形状(窗口,形状);方法进行相同的操作。看看这篇文章的最后一段。这只适用于Java6,可能会在Java7中出现问题。。。这是一个非常狡猾的小类:)好吧,我知道这个网站,事实上,我找到了一种方法,使我的窗口具有适合我的gif图像的圆形形状。它更好,但并不完美。关于你提到的站点,问题是如果我将窗口设置为透明,那么它的内容也是透明的!但是我想让我的图像显示出来…@G_A哦,我不想提及透明度的事情,因为就像你发现的那样,它使整个窗口透明。当您的意思是“它不是完美的”时,您的意思是实现很难看(代码方面),还是说实际的启动屏幕看起来很难看(使用setShape()方法)?