赞 | 0 |
VIP | 1 |
好人卡 | 12 |
积分 | 1 |
经验 | 44173 |
最后登录 | 2024-5-2 |
在线时间 | 552 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 117
- 在线时间
- 552 小时
- 注册时间
- 2012-8-18
- 帖子
- 1429
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
在RMVX中貌似有了线性渐变的矩形绘制,利用它可以进行更多的(bu)科学绘制
首先要引入一个很渣的东西——配色条,它用于设置渐变的内容- class ColorStrip
- def initialize(length,color1,color2=nil)
- raise TypeError,"不可以将#{length.class}代入配色条(length)." if length.class != Fixnum
- raise TypeError,"不可以将#{color1.class}代入配色条(color)." if color1.class != Color
- @length = length
- color2 ||= color1
- raise TypeError,"不可以将#{color2.class}代入配色条(color)." if color2.class != Color
- [url=home.php?mod=space&uid=10453]@color[/url] = {}
- @color[0] = color1
- @color[length] = color2
- end
-
- def add(pos,color)
- raise TypeError,"应用了非法的配色条位置." if pos.class != Fixnum
- raise TypeError,"不可以将#{color.class}代入配色条(color)." if color.class != Color
- @color[pos] = color
- end
-
- def get(pos)
- raise TypeError,"应用了非法的配色条位置." if pos.class != Fixnum
- bmp = bitmap
- c = bmp.get_pixel(pos,0)
- bmp.dispose
- c
- end
-
- def bitmap
- key = @color.keys.sort!
- bmp = Bitmap.new(@length,1)
- for i in 0...key.size-1
- color1 = @color[key[i]]
- color2 = @color[key[i+1]]
- pos1 = key[i]
- pos2 = key[i+1]
- bmp.gradient_fill_rect(pos1,0,pos2-pos1,1, color1, color2)
- end
- bmp
- end
- end
复制代码 使用方法想必这里的神触们肯定都能明白……
接下来引入对Bitmap的方法的定义……- class Bitmap
- def draw_strip(rect,cs,dir=0)
- xr = (rect.x)..(rect.x+rect.width)
- yr = (rect.y)..(rect.y+rect.height)
- bitmap = cs.bitmap
- case dir
- when 0
- for y in yr
- blt(rect.x,y,bitmap,bitmap.rect)
- end
- when 1
- bmp = Bitmap.new(1,rect.height)
- for y in yr
- bmp.set_pixel(0,y-rect.y,cs.get(y-rect.y))
- end
- for x in xr
- blt(x,rect.y,bmp,bmp.rect)
- end
- bmp.dispose
- end
- bitmap.dispose
- end
- #以上是线性渐变
- def draw_round(x, y, r, c1, c2=nil)
- if c1.class == Bitmap
- sample = c1
- elsif c1.class == ColorStrip
- sample = c1.bitmap
- else
- sample = Bitmap.new(r, 1)
- c2 ||= c1
- sample.gradient_fill_rect(sample.rect, c1, c2)
- end
- cx, cy = x, y
- (0...r).each{|y|
- xr = Math.sqrt(r * r - y * y)
- next if y >= xr
- (0..xr).each{|x|
- dis = Math.hypot(x, y)
- c = sample.get_pixel(dis, 0)
- set_pixel cx + x, cy + y, c
- set_pixel cx - x, cy + y, c
- set_pixel cx - x, cy - y, c
- set_pixel cx + x, cy - y, c
- set_pixel cx + y, cy + x, c
- set_pixel cx - y, cy + x, c
- set_pixel cx - y, cy - x, c
- set_pixel cx + y, cy - x, c
- }
- }
- sample.dispose
- end
- #以上是圆的放射性渐变
- end
复制代码 圆的渐变方法来自兰触,在此表示谢意
突然发现没什么可说的……贴张图吧
|
评分
-
查看全部评分
|