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

Project1

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

[已经过期] 有关Bitmap#blur的改进

[复制链接]

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1697
在线时间
3038 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

跳转到指定楼层
1
发表于 2013-9-15 08:09:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
  1. #=============================================================================
  2. # ■ Bitmap重定义
  3. #=============================================================================

  4. class Bitmap
  5.   def blur(strength = 1, opacity = 10)
  6.    (-strength).upto(strength) do |x|
  7.      (-strength).upto(strength) do |y|
  8.       next if x.zero? and y.zero?
  9.       src_rect = Rect.new(0, 0, width - x, height - y)
  10.       blt(x, y, self, src_rect, opacity)
  11.      end
  12.    end
  13.   end
  14. end
复制代码
这个blur如果反复递归的话会出现bitmap大小越来越大(也就是黑边填充)的现象。
求改进,求更新
顺便召唤 @忧雪の伤

Lv2.观梦者

梦石
0
星屑
762
在线时间
1270 小时
注册时间
2011-2-14
帖子
5589
2
发表于 2013-9-15 10:44:36 | 只看该作者
  1. #=============================================================================
  2. # ■ Bitmap重定义
  3. #=============================================================================

  4. class Sprite
  5.   alias ud update
  6.   def update
  7.     self.bitmap = self.bitmap.exc
  8.     ud
  9.   end
  10. end

  11. class Bitmap
  12.   def blur(strength = 1, opacity = 5)
  13.     blur_in(strength, opacity)
  14.     extend(strength,strength,strength,strength)
  15.   end
  16.   def exc
  17.     return self if not @excb
  18.     self.dispose
  19.     return @excb
  20.   end
  21.   def blur_in(strength = 1, opacity = 10)
  22.       (-strength).upto(strength) do |x|
  23.      (-strength).upto(strength) do |y|
  24.       next if x.zero? and y.zero?
  25.       src_rect = Rect.new(0, 0, width - x, height - y)
  26.       blt(x, y, self, src_rect, opacity)
  27.      end
  28.    end
  29. end
  30. def extend(lx,ly,rx,ry)
  31.    new_bitmap = Bitmap.new(width+lx+rx,height+ly+ry)
  32.    new_bitmap.blt(lx,ly,self,Rect.new(0, 0, width, height))
  33.    @excb = new_bitmap
  34. end
  35. end
  36. s = Sprite.new
  37. s.bitmap = Bitmap.new(32,32)
  38. s.bitmap.fill_rect(0,0,32,32,Color.new(255,0,0))
  39. s.x = 320
  40. s.y = 240
  41. s.ox = s.bitmap.width / 2
  42. s.oy = s.bitmap.height / 2
  43. loop{Graphics.update;s.update;s.bitmap.blur;s.ox = s.bitmap.width / 2;
  44. s.oy = s.bitmap.height / 2
  45. }
复制代码
边blur边扩充边缘
不过这个东西还不够卫生不能多用

点评

我说的是默认不扩充边缘的。 问题是扩充边缘了。  发表于 2013-9-15 21:12
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-29 22:17

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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