设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2069|回复: 2
打印 上一主题 下一主题

[原创发布] 用Bitmap#hue_change 模拟 HSL颜色渐变

[复制链接]

Lv4.逐梦者

梦石
0
星屑
6483
在线时间
119 小时
注册时间
2020-1-8
帖子
234
跳转到指定楼层
1
发表于 2022-3-27 14:27:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
RUBY 代码复制
  1. class Color
  2.   def hue
  3.     r, g, b = self.red / 255, self.green / 255, self.blue / 255
  4.  
  5.     max = min = r
  6.     if g > max then max = g else min = g end
  7.     if b > max then max = b elsif b < min then min = b end
  8.  
  9.     return 0 if max == min
  10.  
  11.     vH = case max
  12.          when r then (g - b) * 60 / (max - min)
  13.          when g then (b - r) * 60 / (max - min) + 120
  14.          when b then (r - g) * 60 / (max - min) + 240
  15.          end
  16.     if vH < 0 then vH += 360 elsif vH > 360 then vH -= 360 end
  17.     vH
  18.   end
  19. end
  20.  
  21.  
  22. class Bitmap
  23.   def draw_scan0(colorA, colorB)
  24.     self.set_pixel(0, 0, colorA)
  25.     return if self.width == 1
  26.     self.set_pixel(0, self.width - 1, colorB)  
  27.     return if self.width == 2
  28.  
  29.     hueA, hueB = colorA.hue, colorB.hue
  30.     deltaHue = (hueB - hueA) / (self.width - 1)
  31.  
  32.     hue, pixel = hueA, Bitmap.new(1, 1)   
  33.  
  34.     1.upto(self.width - 2) do |i|
  35.       pixel.set_pixel(0, 0, colorA)
  36.       pixel.hue_change(hue += deltaHue)
  37.       self.set_pixel(i, 0, pixel.get_pixel(0, 0))
  38.     end
  39.  
  40.     pixel.dispose
  41.  
  42.   end
  43. end
  44.  
  45.  
  46. bitmap = Bitmap.new(640, 1)
  47. red = Color.new(255, 0, 0)
  48. blue = Color.new(0, 0, 255)
  49. count, t = 0, Time.now
  50. loop do
  51.   bitmap.draw_scan0(red, blue)
  52.   break if Time.now - t >= 1.0
  53.   count += 1
  54. end
  55. print "Bitmap#draw_scan0 => #{count}次/秒"
  56.  
  57. sprite = Sprite.new
  58. sprite.bitmap = bitmap
  59. sprite.y = 240
  60. sprite.zoom_y = 20
  61.  
  62. loop {Graphics.update}

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

2
发表于 2022-3-27 14:52:10 | 只看该作者
说起来hue有多个公式,rm用的到底是哪一种呢?反正我图简便就用了坐标旋转……

点评

不知道……  发表于 2022-3-27 15:08
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-22 18:16

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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