使用Image文件作为光标

时间:2016-06-10 06:15:14

标签: user-interface bitmap cursor scheme racket

我是Racket和StackOverflow的新手。我正在尝试使用IMAGE.png作为光标。但是光标的白色部分是由背景颜色合并的。如果我将光标悬停在黑色粗线上,则光标完全不可见,因为白色变为透明。白色应该是不透明的。

首先,我使用它,它具有256x256维度,32位深度。我使用以下代码将尺寸调整为16x16。

(require 2htdp/image)  

(define mag IMAGE.png);; acutally, I used "insert image" in DrRacket IDE  
(define new-mag (scale (/ 1 16) mag))  
(save-image new-mag "mag.png")  
new-mag  
(image-width new-mag)  
(image-height new-mag) 

根据cursor%的文档,必须使用16x16位深度为1的位图文件来创建光标。要将位深度更改为1,将应用以下代码。

(require racket/gui/base)

(define bm1 (read-bitmap "mag.png"))  
(define bm2 (make-object bitmap% 16 16 #t #f 1.0))  
(send (send bm2 make-dc)draw-bitmap bm1 0 0)  
(send bm2 save-file "mag2use.png" 'png)  
(define bm (read-bitmap "mag2use.png"))  
(printf "~a ~a ~a ~a~n"   
    (send bm get-width)  
    (send bm get-height)  
    (send bm get-depth)  
    (send bm is-color?))  

然后我使用位图mag2use.png作为光标。

(define zoom-cursor (make-object cursor% bm bm 0 0))

1 个答案:

答案 0 :(得分:1)

遗憾的是,文档没有提到mask参数是透明蒙版。

遮罩中的白色像素在光标中变为透明,并且您将位图本身用作遮罩。

在面具中用黑色填充您想要不透明的部分。