扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 154|回复: 0

[转载发布] 用Bitmap#hue_change 模拟 HSL颜色渐变

[复制链接]
累计送礼:
0 个
累计收礼:
0 个
  • TA的每日心情
    开心
    6 天前
  • 签到天数: 127 天

    连续签到: 11 天

    [LV.7]常住居民III

    2341

    主题

    417

    回帖

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    6
    卡币
    11285
    OK点
    16
    推广点
    0
    同能卷
    0
    积分
    14071

    灌水之王

    发表于 2024-4-20 02:09:03 | 显示全部楼层 |阅读模式
    RUBY 代码
    1. class Color
    2.   def hue
    3.     r, g, b = self.red / 255, self.green / 255, self.blue / 255
    4.     max = min = r
    5.     if g > max then max = g else min = g end
    6.     if b > max then max = b elsif b < min then min = b end
    7.     return0if max == min
    8.     vH = case max
    9.          when r then(g - b) * 60 / (max - min)
    10.          when g then(b - r) * 60 / (max - min) + 120
    11.          when b then(r - g) * 60 / (max - min) + 240
    12.          end
    13.     if vH < 0then vH += 360elsif vH > 360then vH -= 360end
    14.     vH
    15.   end
    16. end
    17. class Bitmap
    18.   def draw_scan0(colorA, colorB)
    19.     self.set_pixel(0, 0, colorA)
    20.     returnifself.width == 1
    21.     self.set_pixel(0, self.width - 1, colorB)  
    22.     returnifself.width == 2
    23.     hueA, hueB = colorA.hue, colorB.hue
    24.     deltaHue = (hueB - hueA) / (self.width - 1)
    25.     hue, pixel = hueA, Bitmap.new(1, 1)   
    26.     1.upto(self.width - 2)do |i|
    27.       pixel.set_pixel(0, 0, colorA)
    28.       pixel.hue_change(hue += deltaHue)
    29.       self.set_pixel(i, 0, pixel.get_pixel(0, 0))
    30.     end
    31.     pixel.dispose
    32.   end
    33. end
    34. bitmap = Bitmap.new(640, 1)
    35. red = Color.new(255, 0, 0)
    36. blue = Color.new(0, 0, 255)
    37. count, t = 0, Time.now
    38. loopdo
    39.   bitmap.draw_scan0(red, blue)
    40.   breakifTime.now - t >= 1.0
    41.   count += 1
    42. end
    43. print"Bitmap#draw_scan0 => #{count}次/秒"
    44. sprite = Sprite.new
    45. sprite.bitmap = bitmap
    46. sprite.y = 240
    47. sprite.zoom_y = 20
    48. loop{Graphics.update}
    复制代码

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

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

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

    GMT+8, 2025-4-4 02:19 , Processed in 0.130223 second(s), 53 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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