module Snowy
Constants
- BLACK
- WHITE
Public Class Methods
driver()
click to toggle source
# File lib/snowy/common.rb, line 151 def self.driver @@driver end
generate_to_png(code, size = 128)
click to toggle source
@return
string object
@param [Integer] code
32 bits integer
@param [Integer] size
output png image size
# File lib/snowy/common.rb, line 71 def self.generate_to_png(code, size: 128, cap: true, extendcap: true, angle: 0, color: nil, outline: nil) if code.kind_of?(String) code = Zlib.crc32(code) end if color if outline.nil? r = color.get_red g = color.get_green b = color.get_blue a = color.get_alpha end else r = (code >> 28) & 0x0f g = (code >> 24) & 0x0f b = (code >> 20) & 0x0f r = (r << 3) | 0x80 g = (g << 3) | 0x80 b = (b << 3) | 0x80 color = rgba(r, g, b) end if outline.nil? outline = rgba(r * 7 / 8, g * 7 / 8, b * 7 / 8, a || 0xff) end code = code ^ (code >> 16) ^ ((code & 0xffff) << 16) if extendcap depth = extendcap ? 7 : 6 triangles = [] # [[x1, y1, x2, y2, x3, y3], ...] depth.times do |level| # level # 現在の階層 # total # 現在の階層までの総要素数 # layer # 現在の階層の要素数 level_1 = level + 1 total = level_1 ** 2 layer = level * 2 + 1 offbase = (level * level_1) / 2 offpivot = (layer + 1) / 2 - 1 layer.times do |i| if !extendcap && level_1 == depth i += 1 break if (i + 1) == layer #break if i > layer end #if (i + 1) > (layer + 1) / 2 if i > offpivot # mirror off = offbase + (layer - i - 1) else off = offbase + i end off -= 1 if !extendcap && level_1 == depth next if code[off] == 0 m_level_i = -level + i if i.even? triangles << [m_level_i, level, m_level_i + 1, level_1, m_level_i - 1, level_1] else triangles << [m_level_i, level_1, m_level_i + 1, level, m_level_i - 1, level] end end end # 一番外側に三角形を配置する if cap if extendcap triangles << [-5, 7, -3, 7, -4, 8] triangles << [5, 7, 4, 8, 3, 7] else triangles << [-4, 6, -2, 6, -3, 7] triangles << [4, 6, 3, 7, 2, 6] end end driver.render(size, triangles, rgba(255, 255, 255, 0), color, outline, angle) end
rgba(r, g, b, a = 255)
click to toggle source
# File lib/snowy/common.rb, line 50 def self.rgba(r, g, b, a = 255) return (r.to_i.clamp(0, 255) << 24) | (g.to_i.clamp(0, 255) << 16) | (b.to_i.clamp(0, 255) << 8) | (a.to_i.clamp(0, 255) ) end