2016-06-10 90 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