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

Project1

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

[讨论] 【卖萌】关于渐变图像的绘制

[复制链接]

Lv1.梦旅人

梦石
0
星屑
112
在线时间
551 小时
注册时间
2012-8-18
帖子
1429
跳转到指定楼层
1
发表于 2013-5-18 20:30:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
在RMVX中貌似有了线性渐变的矩形绘制,利用它可以进行更多的(bu)科学绘制
首先要引入一个很渣的东西——配色条,它用于设置渐变的内容
  1. class ColorStrip
  2.   def initialize(length,color1,color2=nil)
  3.     raise TypeError,"不可以将#{length.class}代入配色条(length)." if length.class != Fixnum
  4.     raise TypeError,"不可以将#{color1.class}代入配色条(color)." if color1.class != Color
  5.     @length = length
  6.     color2 ||= color1
  7.     raise TypeError,"不可以将#{color2.class}代入配色条(color)." if color2.class != Color
  8.     [url=home.php?mod=space&uid=10453]@color[/url] = {}
  9.     @color[0] = color1
  10.     @color[length] = color2
  11.   end
  12.   
  13.   def add(pos,color)
  14.     raise TypeError,"应用了非法的配色条位置." if pos.class != Fixnum
  15.     raise TypeError,"不可以将#{color.class}代入配色条(color)." if color.class != Color
  16.     @color[pos] = color
  17.   end
  18.   
  19.   def get(pos)
  20.     raise TypeError,"应用了非法的配色条位置." if pos.class != Fixnum
  21.     bmp = bitmap
  22.     c = bmp.get_pixel(pos,0)
  23.     bmp.dispose
  24.     c
  25.   end
  26.   
  27.   def bitmap
  28.     key = @color.keys.sort!
  29.     bmp = Bitmap.new(@length,1)
  30.     for i in 0...key.size-1
  31.       color1 = @color[key[i]]
  32.       color2 = @color[key[i+1]]
  33.       pos1 = key[i]
  34.       pos2 = key[i+1]
  35.       bmp.gradient_fill_rect(pos1,0,pos2-pos1,1, color1, color2)
  36.     end
  37.     bmp
  38.   end
  39. end
复制代码
使用方法想必这里的神触们肯定都能明白……
接下来引入对Bitmap的方法的定义……
  1. class Bitmap
  2.   def draw_strip(rect,cs,dir=0)
  3.     xr = (rect.x)..(rect.x+rect.width)
  4.     yr = (rect.y)..(rect.y+rect.height)
  5.     bitmap = cs.bitmap
  6.     case dir
  7.     when 0
  8.       for y in yr
  9.         blt(rect.x,y,bitmap,bitmap.rect)
  10.       end
  11.     when 1
  12.       bmp = Bitmap.new(1,rect.height)
  13.       for y in yr
  14.         bmp.set_pixel(0,y-rect.y,cs.get(y-rect.y))
  15.       end
  16.       for x in xr
  17.         blt(x,rect.y,bmp,bmp.rect)
  18.       end
  19.       bmp.dispose
  20.     end
  21.     bitmap.dispose
  22.   end
  23.   #以上是线性渐变
  24.     def draw_round(x, y, r, c1, c2=nil)
  25.      if c1.class == Bitmap
  26.       sample = c1
  27.     elsif c1.class == ColorStrip
  28.       sample = c1.bitmap
  29.     else
  30.       sample = Bitmap.new(r, 1)
  31.       c2 ||= c1
  32.       sample.gradient_fill_rect(sample.rect, c1, c2)
  33.     end
  34.     cx, cy = x, y
  35.     (0...r).each{|y|
  36.       xr = Math.sqrt(r * r - y * y)
  37.       next if y >= xr
  38.       (0..xr).each{|x|
  39.         dis = Math.hypot(x, y)
  40.         c = sample.get_pixel(dis, 0)
  41.         set_pixel cx + x, cy + y, c
  42.         set_pixel cx - x, cy + y, c
  43.         set_pixel cx - x, cy - y, c
  44.         set_pixel cx + x, cy - y, c
  45.         set_pixel cx + y, cy + x, c
  46.         set_pixel cx - y, cy + x, c
  47.         set_pixel cx - y, cy - x, c
  48.         set_pixel cx + y, cy - x, c
  49.       }
  50.     }
  51.     sample.dispose
  52.   end
  53.   #以上是圆的放射性渐变
  54. end
复制代码
圆的渐变方法来自兰触,在此表示谢意
突然发现没什么可说的……贴张图吧

点评

这样赞也不错啊,呵呵。 = =  发表于 2013-5-18 21:18

评分

参与人数 4星屑 +28 收起 理由
kuerlulu + 7 我也来了
某死灵法师 + 7 我也来了
Mr.红茶 + 7 我也来了
514578363 + 7 我来了!

查看全部评分

我要填坑!我要背单词!我要学日语!我要每天锻炼!
好吧呵呵= =

Lv1.梦旅人

梦石
0
星屑
50
在线时间
20 小时
注册时间
2011-4-24
帖子
19
2
发表于 2013-5-18 20:34:07 | 只看该作者
前排膜拜二要神触
回复 支持 反对

使用道具 举报

Lv1.梦旅人

Mr.Gandum

梦石
0
星屑
226
在线时间
2070 小时
注册时间
2007-1-31
帖子
3039

贵宾

3
发表于 2013-5-18 21:14:31 | 只看该作者
这其实就是Direct2D的渐变色绘制方法。当然人家的效率比我们这个高很多。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
75
在线时间
241 小时
注册时间
2013-3-28
帖子
67
4
发表于 2013-6-7 19:09:47 | 只看该作者
混个脸熟
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
105
在线时间
0 小时
注册时间
2013-6-7
帖子
1
5
发表于 2013-6-7 20:55:39 | 只看该作者
触                  
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
20 小时
注册时间
2013-7-27
帖子
20
6
发表于 2013-7-27 20:36:14 | 只看该作者
跪拜大触
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-28 08:43

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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