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

Project1

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

[原创发布] Bitmap模糊绘制blur_blt

[复制链接]

Lv4.逐梦者

梦石
0
星屑
6483
在线时间
119 小时
注册时间
2020-1-8
帖子
234
1
发表于 2022-3-12 23:25:52 | 显示全部楼层
我打开是  No such file to load -- main.rb……

RUBY 代码复制
  1. $: << "."
  2. load "main.rb"


以前好奇高斯模糊,见过类似的计算公式来计算kernel,但我基本没看懂……
效果和效率都不错,就是和PS的高斯模糊看起来有点不一样……

点评

嗯,得对照测试一下高斯模糊的效果,我改一下标题2333  发表于 2022-3-13 00:00
我用就没问题呀,大不了就把上面两段代码复制进去……  发表于 2022-3-12 23:59
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6483
在线时间
119 小时
注册时间
2020-1-8
帖子
234
2
发表于 2022-3-13 11:08:57 | 显示全部楼层
本帖最后由 RPGzh500223 于 2022-3-13 11:32 编辑
  1. class Bitmap
  2.   def blur_blt2(src_bitmap, sigma = 1.0)
  3.     self.blt(0, 0, src_bitmap, src_bitmap.rect)
  4.     return if sigma < 0.01
  5.     d, sum, sigma_ratio = 4, 0.0, -0.5 / (sigma * sigma)
  6.    
  7.     1.upto(d) do |dx|
  8.       mul = dx * dx
  9.       sum += Math.exp(mul * sigma_ratio) * 4
  10.       1.upto(d) do |dy|
  11.         sum += Math.exp((mul + dy * dy) * sigma_ratio) * 4
  12.       end
  13.     end
  14.     sum += 1
  15.         
  16.     var = 255.0 / sum
  17.     d_max = (Math.log(1 / var) / sigma_ratio).ceil
  18.    
  19.     1.upto(d) do |dx|
  20.       1.upto(d) do |dy|
  21.         distance = dx * dx + dy * dy
  22.         next if distance > d_max
  23.         alpha = Math.exp(distance * sigma_ratio) * var
  24.         self.blt( dx,  dy, src_bitmap, src_bitmap.rect, alpha)
  25.         self.blt( dx, -dy, src_bitmap, src_bitmap.rect, alpha)
  26.         self.blt(-dx,  dy, src_bitmap, src_bitmap.rect, alpha)
  27.         self.blt(-dx, -dy, src_bitmap, src_bitmap.rect, alpha)
  28.       end
  29.     end
  30.   end
  31. end
复制代码


分享的关于写脚本的小心得(无关于如何计算,其实如何算才是核心……)
  for...in...在ruby里好像是效率最低的循环
  多重赋值比多次赋值快
  能合并的计算常量就先合并
  尽可能减少循环次数,例如对称一次就基本少一半循环
  其实Math里不少计算是很费效率的,尽可能避免

------------------------------------------------------------------------------------------
模糊效果,我一般就用SSE的pavgb写的均值模糊,高斯模糊的话就调GDI+实现

点评

for..in...不是效率最低的,这个我测过,其实取决于in后面你怎么写(但怎么写它也不会是效率最低的循环方式),其他的没问题  发表于 2022-3-14 07:02
想问下精灵缩放可以二次立方缩放吗?  发表于 2022-3-13 13:05
那这里改用均值模糊的公式是不是更快点  发表于 2022-3-13 11:54
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-6-18 10:04

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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