2016-06-10 65 views
1

我是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) 

根据光标%的文档,必须使用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

不幸的是,文档没有提到mask参数是透明度掩码。

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

在面具中填充您希望成为不透明的部分。

+0

我是否需要使用不同的位图掩码? @molbdnilo – Toat

+0

是的,除非你想使用全黑色光标。 – molbdnilo

+0

我已经在图像中填充了黑色并用于掩码。图像内部的白色变得不透明。非常感谢你@molbdnilo – Toat