Project1
标题:
無聊的東東 RM_Bar_code RM條碼
[打印本页]
作者:
danny8376
时间:
2008-12-4 08:23
标题:
無聊的東東 RM_Bar_code RM條碼
同步發表於RMXP原创技术发布区
這東西向 照相手機的"行動條碼"
#==============================================================================
# RM_Bar_code By 釣到一隻猴子@_@ ( AAM@_@ )
=begin
#------------------------------------------------------------------------------
使用方法
rmbc = RM_Bar_code.new(text[, size]) # text 為原文字(Stirng類物件)
# size為條碼大小(size * size的正方形)
# 以原文字生成RM_Bar_code
rmbc = RM_Bar_code.new(bitmap) # bitmap 為條碼影像(Bitmap類物件)
# 以條碼影像生成RM_Bar_code
rmbc.make_bar_code(text[, size])
# 同RM_Bar_code.new(text[, size]) 但僅可用於RM_Bar_code類物件
rmbc.load_bar_code(bitmap)
# 同RM_Bar_code.new(bitmap) 但僅可用於RM_Bar_code類物件
rmbc.text
# 取得原文字(Stirng類物件)
rmbc.bitmap
# 取得條碼影像(Bitmap類物件)
#------------------------------------------------------------------------------
=end
#==============================================================================
#==============================================================================
# ■ RM_Bar_code
#------------------------------------------------------------------------------
# 。
#==============================================================================
class RM_Bar_code
#--------------------------------------------------------------------------
# ●
#--------------------------------------------------------------------------
Black = [0,0,0,255].pack("c*")
Gray = [128,128,128,255].pack("c*")
White = [255,255,255,255].pack("c*")
#--------------------------------------------------------------------------
# ●
#--------------------------------------------------------------------------
def initialize(data, size = 32)
@bitmap = nil
@text = ""
if data.is_a?(String)
make_bar_code(data, size)
elsif data.is_a?(Bitmap)
load_bar_code(data)
# else
end
end
#--------------------------------------------------------------------------
# ●
#--------------------------------------------------------------------------
def make_bar_code(text, size = 32)
@text = text
@bitmap = Bitmap.new(size, size)
b = @text.unpack("b*")[0]
b += "2" * (size ** 2 - b.size) if b.size < size ** 2
b.gsub!("0") {Black}
b.gsub!("1") {White}
b.gsub!("2") {Gray}
@bitmap.save(b)
end
#--------------------------------------------------------------------------
# ●
#--------------------------------------------------------------------------
def load_bar_code(bitmap)
@bitmap = bitmap
b = @bitmap.load
b.gsub!(Gray) {""}
b.gsub!(Black) {"0"}
b.gsub!(White) {"1"}
@text = [b].pack("b*")
end
#--------------------------------------------------------------------------
# ●
#--------------------------------------------------------------------------
def text
@text
end
#--------------------------------------------------------------------------
# ●
#--------------------------------------------------------------------------
def bitmap
@bitmap
end
end
#==============================================================================
# ■ Bitmap
#------------------------------------------------------------------------------
# 处理影像的类。
#==============================================================================
class Bitmap
RtlMoveMemory_pi = Win32API.new('kernel32', 'RtlMoveMemory', 'pii', 'i')
RtlMoveMemory_ip = Win32API.new('kernel32', 'RtlMoveMemory', 'ipi', 'i')
#--------------------------------------------------------------------------
# ●
#--------------------------------------------------------------------------
def load
data = "rgba" * width * height
RtlMoveMemory_pi.call(data, address, data.length)
return data
end
#--------------------------------------------------------------------------
# ●
#--------------------------------------------------------------------------
def save(str)
RtlMoveMemory_ip.call(address, str, width * height * 4)
return self
end
#--------------------------------------------------------------------------
# ●
#--------------------------------------------------------------------------
def address
# [[[bitmap.object_id * 2 + 16] + 8] + 16] == 数据的开头
buffer, ad = "xxxx", object_id * 2 + 16
RtlMoveMemory_pi.call(buffer, ad, 4)
ad = buffer.unpack("L")[0] + 8
RtlMoveMemory_pi.call(buffer, ad, 4)
ad = buffer.unpack("L")[0] + 16
RtlMoveMemory_pi.call(buffer, ad, 4)
return buffer.unpack("L")[0]
end
end
复制代码
作者:
雪流星
时间:
2008-12-4 08:39
长脚本請用HTML匡住,不然很占版面,谢谢
作者:
偶尔探花不雅
时间:
2008-12-7 03:28
提示:
作者被禁止或删除 内容自动屏蔽
作者:
MXF953798791
时间:
2008-12-7 04:43
不知道是什么........
作者:
DeathKing
时间:
2009-7-26 14:25
这叫“二维条码”吧?
我说,这个可以像MD5一样,验证游戏的完整性?或是给自己的游戏盖一戳子?
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1