0

我使用以下方法创建了一个游标:

    BufferedImage im=null;
    try {
        im = ImageIO.read(new File("images/cursor1.jpg"));
    } catch (IOException ex) {
        Logger.getLogger(SRGView.class.getName()).log(Level.SEVERE, null, ex);
    }
    Cursor cursor = getToolkit().createCustomCursor(im, new Point(1,1), "s");
    this.setCursor(cursor);

cursor1.jpg 是 5X5(以像素为单位)。但是,当它显示在屏幕上时,它要大得多。我想制作大小为 1X1、5X5、10X10 的游标。我宁愿动态创建图像而不是读取图像文件。IE

for (int x = 0; x < w; x++) {
        for (int y = 0; y < h; y++) {
        im.setRGB(x, y, new Color(255, 0, 0).getRGB());
  }
    }

上面的代码将创建一个宽度、w 和高度为 h 的红色图像“im”,我想用它作为我的光标。

怎么做?

4

1 回答 1

0

似乎 windows 只接受 32X32 大小的光标。所以这就是我解决问题的方法:

主要思想是使 32X32 大小的图像中的每个像素都透明,并仅将颜色应用于您希望在光标中看到的那些像素。在这种情况下,我想要 awxh 红色矩形光标,因此,在 32X32 图像的中心,我将 wxh 像素设置为红色并将该图像设置为光标。

public void setCursorSize(int w, int h) {
    this.cw = w;
    this.ch = h;
    if (w > 32) {
        w = 32;
    }
    if (h > 32) {
        h = 32;
    }
    Color tc = new Color(0, 0, 0, 0);
    BufferedImage im = new BufferedImage(32, 32, BufferedImage.TYPE_4BYTE_ABGR);//cursor size is 32X32
    for (int x = 0; x < 32; x++) {
        for (int y = 0; y < 32; y++) {
            im.setRGB(x, y, tc.getRGB());
        }
    }
    for (int x = 16 - w / 2; x <= 16 + w / 2; x++) {
        for (int y = 16 - h / 2; y <= 16 + h / 2; y++) {
            im.setRGB(x, y, new Color(255, 0, 0).getRGB());
        }
    }
    this.setCursor(getToolkit().createCustomCursor(im, new Point(16, 16), "c1"));
}
于 2012-09-24T05:13:38.033 回答