我试图让this image出现在我的屏幕上,背景是透明的,作为一个更大的程序(作为一个虚拟宠物)的简单测试。
我使用下面的代码来做到这一点:
// Java Program to implement the shaped window
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
class solve extends JFrame {
// main class
public static void main(String[] args)
{
// try block
try {
// create a window
JWindow w = new JWindow();
// set a transparent background of the window
w.setBackground(new Color(0, 0, 0, 0));
// read the image
BufferedImage i = ImageIO.read(new File("froge.png"));
// create a panel
JPanel p = new JPanel() {
// paint the panel
public void paintComponent(Graphics g)
{
// extract the pixel of the image
for (int ii = 1; ii < i.getHeight(); ii++)
for (int j = 1; j < i.getWidth(); j++) {
// get the color of pixel
Color ty = new Color(i.getRGB(j, ii));
// if the color is more than 78 % white ignore it keep it transparent
if (ty.getRed() > 200 && ty.getGreen() > 200 && ty.getBlue() > 200)
g.setColor(new Color(0, 0, 0, 0));
// else set the color
else
g.setColor(new Color(i.getRGB(j, ii)));
// draw a pixel using a line.
g.drawLine(j, ii, j, ii);
}
}
};
// add panel
w.add(p);
// set the location
w.setLocation(350, 300);
// set the size of the window
w.setSize(1120, 320);
// set the visibility of the window
w.setVisible(true);
}
// catch any exception
catch (Exception e) {
// show the error
System.err.println(e.getMessage());
}
}
}
这段代码几乎是从一篇极客文章中复制和粘贴的,该文章声称可以实现与我尝试的相同的东西。对我来说,代码检查出来了,但当我运行它时,我面对的是一个black background on my image
1条答案
按热度按时间3bygqnnd1#
几件事:
p.setOpaque(false);
JFrame w = new JFrame();
和w.setUndecorated(true);
JFrame#getContentPane()
和JFrame#getRootPane()
上调用setOpaque(false)
根据操作系统的不同,可能会有不同的行为。我的经验表明Linux不喜欢透明窗口上的动画,最近有一个针对Mac OS的bug修复,我不知道它是否已经发布。