目标:模拟Windows框架顶部的模糊效果的程序。
到目前为止:
框架的不透明度设置为95%,因此框架略微半透明。该程序截取帧内任何内容的屏幕截图,使其模糊,并将模糊图像设置为帧的背景。问题是框架是半透明的,因此Windows仍然在下面绘制桌面,导致我的程序没有完全模糊。
我已经尝试将框架设置为不可见(在另一种情况下:将不透明度设置为0.0f),截取屏幕截图,模糊它,将其设置为框架的背景,并连续重复以获得所需的效果,但是屏幕要么滞后,要么“闪现”,这让人难以忍受。
我希望实现这一目标:
通过这里的研究,我了解到如果没有与所讨论的平台的窗口管理器进行紧密的原生集成,那么在Java中不能使用活动窗口的截图,根据Java- screen capture behind the application
我还发现Windows API可能会有所帮助。如何通过JNA或类似的方式使用Java或WinApi来实现这一目标? re:Is there a Java library to access the native Windows API?
这是我目前的代码:
public class BlurThread extends Thread {
private final JFrame j;
private final int BLUR_FACTOR = 10;
private Robot r;
public BlurThread(JFrame j) {
this.j = j;
}
@Override
public void run() {
try {
r = new Robot();
BufferedImage nullImage = null, screenShot, filter;
BufferedImageOp a = new GaussianFilter(BLUR_FACTOR);
while (true) {
screenShot = r.createScreenCapture(new Rectangle(j.getX(), j.getY(), j.getWidth(), j.getHeight()));
filter = a.filter(screenShot, nullImage);
ImageIcon i = new ImageIcon(filter);
Mover.setIcon(i); // JLabel
}
} catch (AWTException ex) {
ex.printStackTrace();
}
}
}