查看: 90|回复: 0

[转载发布] Bitmap模糊绘制blur_blt

[复制链接]
  • TA的每日心情
    开心
    前天 09:55
  • 签到天数: 37 天

    连续签到: 3 天

    [LV.5]常住居民I

    2028

    主题

    32

    回帖

    7260

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    0
    卡币
    5184
    OK点
    16
    积分
    7260
    发表于 同元一千年八月八日(秋) | 显示全部楼层 |阅读模式
    不知道有没有人写过?相当于把一张bitmap,模糊的绘制到目标bitmap上,虽然用了高斯分布的公式,但不是高斯模糊,只是糊了点

    下图是sigma=2.0时的模糊,也可以下载范例尝试:  ,按左右键调整模糊程度,确认键退出


    RUBY 代码
    1. class Bitmap
    2.   def blur_blt(src_bitmap, sigma = 1.0)
    3.     blt(0, 0, src_bitmap, src_bitmap.rect)
    4.     returnif sigma < 0.01
    5.     d = 4
    6.     sum = 0.0
    7.     for dx in -d..d
    8.       for dy in -d..d
    9.         sum += Math.exp(-0.5 * (dx * dx + dy * dy) / (sigma * sigma))
    10.       end
    11.     end
    12.     for dx in -d..d
    13.       for dy in -d..d
    14.         alpha = Math.exp(-0.5 * (dx * dx + dy * dy) / (sigma * sigma)) * 255.0 / sum
    15.         nextif alpha < 1
    16.         blt(dx, dy, src_bitmap, src_bitmap.rect, alpha)
    17.       end
    18.     end
    19.   end
    20. end
    复制代码

    下面是测试代码:
    RUBY 代码
    1. b = RPG::Cache.battleback("001-grassland01")
    2. s = Sprite.new
    3. s.bitmap = b.clone
    4. hint = Sprite.new
    5. hint.y = 440
    6. hint.bitmap = Bitmap.new(640, 32)
    7. refresh = Proc.new{ |sigma|
    8.   s.bitmap.clear
    9.   s.bitmap.blur_blt(b, sigma)
    10.   hint.bitmap.clear
    11.   hint.bitmap.draw_text(0, 0, 640, 32, "sigma = %.2f" % sigma, 1)
    12. }
    13. sigma = 1.0
    14. refresh.call(sigma)
    15. loopdo
    16.   Graphics.update
    17.   Input.update
    18.   exitif Input.trigger?(Input::C)
    19.   if Input.press?(Input::RIGHT)
    20.     sigma += 0.05
    21.     refresh.call(sigma)
    22.   elsif Input.press?(Input::LEFT) && sigma > 0
    23.     sigma -= 0.05
    24.     refresh.call(sigma)
    25.   end
    26. end
    复制代码

                 本帖来自P1论坛作者RPGzh500223,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=488959  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    天天去同能,天天有童年!
    回复 论坛版权

    使用道具 举报

    ahome_bigavatar:guest
    ahome_bigavatar:welcomelogin
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2024-5-12 04:06 , Processed in 0.046144 second(s), 42 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表