Project1
标题:
【卖萌】关于渐变图像的绘制
[打印本页]
作者:
无脑之人
时间:
2013-5-18 20:30
标题:
【卖萌】关于渐变图像的绘制
在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
复制代码
圆的渐变方法来自兰触,在此表示谢意
突然发现没什么可说的……贴张图吧
QQ截图20130518202915.png
(41.36 KB, 下载次数: 15)
下载附件
保存到相册
2013-5-18 20:29 上传
作者:
神圣战士06
时间:
2013-5-18 20:34
前排膜拜二要神触
作者:
feizhaodan
时间:
2013-5-18 21:14
这其实就是Direct2D的渐变色绘制方法。当然人家的效率比我们这个高很多。
作者:
你欠抽吧
时间:
2013-6-7 19:09
混个脸熟
作者:
二要触翻天际
时间:
2013-6-7 20:55
触
作者:
十大神兽の1
时间:
2013-7-27 20:36
跪拜大触
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1