赞 | 68 |
VIP | 0 |
好人卡 | 0 |
积分 | 65 |
经验 | 0 |
最后登录 | 2023-7-2 |
在线时间 | 119 小时 |
Lv4.逐梦者
- 梦石
- 0
- 星屑
- 6483
- 在线时间
- 119 小时
- 注册时间
- 2020-1-8
- 帖子
- 234
|
本帖最后由 RPGzh500223 于 2022-3-13 11:32 编辑
- class Bitmap
- def blur_blt2(src_bitmap, sigma = 1.0)
- self.blt(0, 0, src_bitmap, src_bitmap.rect)
- return if sigma < 0.01
- d, sum, sigma_ratio = 4, 0.0, -0.5 / (sigma * sigma)
-
- 1.upto(d) do |dx|
- mul = dx * dx
- sum += Math.exp(mul * sigma_ratio) * 4
- 1.upto(d) do |dy|
- sum += Math.exp((mul + dy * dy) * sigma_ratio) * 4
- end
- end
- sum += 1
-
- var = 255.0 / sum
- d_max = (Math.log(1 / var) / sigma_ratio).ceil
-
- 1.upto(d) do |dx|
- 1.upto(d) do |dy|
- distance = dx * dx + dy * dy
- next if distance > d_max
- alpha = Math.exp(distance * sigma_ratio) * var
- self.blt( dx, dy, src_bitmap, src_bitmap.rect, alpha)
- self.blt( dx, -dy, src_bitmap, src_bitmap.rect, alpha)
- self.blt(-dx, dy, src_bitmap, src_bitmap.rect, alpha)
- self.blt(-dx, -dy, src_bitmap, src_bitmap.rect, alpha)
- end
- end
- end
- end
复制代码
分享的关于写脚本的小心得(无关于如何计算,其实如何算才是核心……)
for...in...在ruby里好像是效率最低的循环
多重赋值比多次赋值快
能合并的计算常量就先合并
尽可能减少循环次数,例如对称一次就基本少一半循环
其实Math里不少计算是很费效率的,尽可能避免
------------------------------------------------------------------------------------------
模糊效果,我一般就用SSE的pavgb写的均值模糊,高斯模糊的话就调GDI+实现 |
|