自定义光标图标加载了额外的阴影像素

时间:2012-02-27 02:48:46

标签: java image user-interface cursor

每当点击某个切换按钮时,我都会更改光标图标。但是加载的图像在底角包含一个额外的像素!这很烦人,就像屏幕上一直有污垢一样。我使用初级图标编辑器创建了光标图标。当我使用Windows照片查看器或photoshop打开图片时,像素不会显示出来。它只显示我在应用程序中使用它。

该应用程序是一个Java应用程序,这就是我设置游标的方式。

Image img = getResourceMap().getImageIcon( iconFilename ).getImage();
        Cursor newCursor = Toolkit.getDefaultToolkit().createCustomCursor( img,
            new Point( 5, 5 ), "cursor" );

有谁知道这个额外阴影像素的可能原因是什么?它发生在朝东的箭头正下方,距离它约2毫米。

enter image description here

您可以看到运行此代码的效果。图像在标签中显示为预期,但作为指针,左下角有一个黑暗的像素。

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);
            }
        });
    }
}

1 个答案:

答案 0 :(得分:1)

起初我认为我们指定的图像比系统光标大小可以处理的图像更大但是我意识到如果我们删除像素的最后一列(!!)它工作得很好!! 我不知道怎么解释这个!

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);