gpt4 book ai didi

bitmap - 在 Racket 中设置位图的 alpha

转载 作者:行者123 更新时间:2023-12-03 05:58:08 25 4
gpt4 key购买 nike

因此,我使用该函数将位图图像分配给对象

(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 参数做些什么吗?另外,您如何知道哪个位图将位于“顶部”?例如,如果我想要一个背景图像,我显然希望它位于底部。

提前致谢。

最佳答案

如果我理解正确,您的位图不包含透明度 channel ,并且您想使用白色值来实现透明度。有一个更好的解决方案,但如果您不想修改图像文件(并坚持使用没有 Alpha channel 的 .bmp),您可以使用 get-argb-pixelsset-argb-pixels当像素为白色(255, 255, 255)时将 Alpha channel 修改为 1。

另一种可能性是将图像保存为 png 格式,同时将背景颜色设置为白色(顺便说一句,我建议使用不太常见的颜色,例如紫色,否则您将无法使用图像中的白色像素)。这可以在任何像样的图像编辑器中完成。然后,您可以在 read-bitmapkind 参数中使用 png/mask 加载带有“掩码”的 bitmap% 。 .

我推荐的另一种方法是使用具有 Alpha channel 的图像文件,并使用 bmp/alpha 加载它(对于 .bmp文件)。通常使用带有 Alpha channel 的 png 格式(png 文件类似于 bmp 文件,但压缩后不会丢失)。您现在可以使用任何透明度值,例如 50%,这可以很好地避免粗糙的边缘。

关于哪个图像将位于顶部,(发送 dc 绘制位图 bmp) 将始终在 dc 中已绘制的内容之上绘制 bmp ,所以你在这里使用它的方式就可以了。

旁注:

  • 您不应该在 make-enemy-alienship 内调用 read-bitmap,因为调用 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以避免取决于当前目录的相对路径问题。但这不是您首先关心的问题,您可以稍后再处理,现在专注于在屏幕上显示漂亮的宇宙飞船。

关于bitmap - 在 Racket 中设置位图的 alpha,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23721745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com