因此,我将位图图像分配给具有函数
的对象(define (make-enemy-alienship bitmap-target)
(let ((dc (new bitmap-dc% [bitmap bitmap-target])))
(send dc draw-bitmap (read-bitmap "alien.bmp") 0 0)))
并且我希望图片中的白色像素是透明的,但我不觉得文档有很多帮助。是否应该使用mask参数完成某些操作?另外,你怎么知道哪个位图会在顶部'?例如,我是否想要背景图像,我显然希望它在底部。
提前致谢。
答案 0 :(得分:1)
如果我理解正确,您的位图不包含透明度通道,并且您希望将白色值用于透明度。
有一个更好的解决方案,但如果你不想修改你的图像文件(并坚持使用.bmp
没有alpha通道),你可以使用get-argb-pixels
和set-argb-pixels
来修改alpha当像素为白色时,通道为1(255,255,255)。
另一种可能性是以png
格式保存图像,同时将背景颜色设置为白色(顺便说一句,我建议使用不太常见的颜色,如紫色,否则你将无法使用白色图像中的像素)。这是在任何体面的图像编辑器中完成的。然后,您可以使用"掩码"加载bitmap%
。在read-bitmap
的png/mask
参数中使用kind
。
另一种方法,我推荐的方法是使用具有Alpha通道的图像文件,并使用bmp/alpha
(用于.bmp
个文件)加载它。通常将png
格式与alpha通道一起使用(png
文件类似于bmp
文件,但压缩时不会丢失)。您现在可以使用任何透明度值,例如50%,这样可以避免粗糙边缘。
关于哪个图片位于顶部,(send dc draw-bitmap bmp)
将始终在bmp
已经绘制的内容上绘制dc
,因此您在此处使用它的方式很好。< / p>
附注:
您不应该在read-bitmap
内调用make-enemy-alienship
,因为调用read-bitmap
代价很高(它会打开一个文件,分配一些内存缓冲区,将文件复制到缓冲区中,以及关闭文件)。相反,您应该将(read-bitmap "alien.bmp")
的结果保存到变量中:
(define alien-bmp (read-bitmap "alien.bmp"))
(define (make-enemy-alienship bitmap-target)
(let ((dc (new bitmap-dc% [bitmap bitmap-target])))
(send dc draw-bitmap alien-bmp 0 0)))
您应该使用define-runtime-path
来避免相对路径问题,具体取决于您当前的目录。但这不是你先前关注的问题,你可以稍后处理,现在就把重点放在屏幕上有漂亮的太空飞船。