每当单击某个切换按钮时,我都会更改光标图标。但是加载的图像在底角包含一个额外的像素!这很烦人,就像屏幕上不断有污垢一样。我使用初级图标编辑器创建了光标图标。当我使用 windows 照片查看器或 photoshop 打开图片时,像素不会自行显示。它仅在我在应用程序中使用它时显示。
该应用程序是一个 Java 应用程序,我是这样设置光标的。
Image img = getResourceMap().getImageIcon( iconFilename ).getImage();
Cursor newCursor = Toolkit.getDefaultToolkit().createCustomCursor( img,
new Point( 5, 5 ), "cursor" );
有谁知道这个额外的阴影像素可能是什么原因?它出现在朝东箭头的正下方,在其下方约 2 毫米处。
运行这段代码可以看到效果。图像按预期出现在标签中,但作为指针,左下角有一个变暗的像素。
import java.awt.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.imageio.ImageIO;
import java.net.URL;
class ShowImage {
public static void main(String[] args) throws Exception {
URL url = new URL("http://i.stack.imgur.com/kP1jv.png");
final BufferedImage img = ImageIO.read(url);
System.out.println(
"Image is: " + img.getWidth() + "x" + img.getHeight());
SwingUtilities.invokeLater( new Runnable() {
public void run() {
JLabel l = new JLabel(new ImageIcon(img));
l.setBorder(new EmptyBorder(5,5,5,5));
l.setOpaque(true);
l.setBackground(Color.GREEN.darker());
Cursor newCursor = Toolkit.getDefaultToolkit().
createCustomCursor( img,new Point( 5, 5 ), "c" );
l.setCursor(newCursor);
JOptionPane.showMessageDialog(null, l);
}
});
}
}
最佳答案
起初我以为我们要指定一个比系统光标大小可以处理的更大的图像,但我意识到如果我们删除像素的最后一列 (!!) 它工作正常!! 我不知道如何解释这个!
BufferedImage originalImg = ImageIO.read(new File("kP1jv.png"));
System.out.println("originalImage is: " + originalImg.getWidth() + "x"
+ originalImg.getHeight());
Dimension d = Toolkit.getDefaultToolkit().getBestCursorSize(
originalImg.getWidth(), originalImg.getHeight());
final BufferedImage img = originalImg.getSubimage(0, 0, d.width/*-1*/, d.height-1);
关于java - 自定义光标图标加载了一个额外的阴影像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9459451/