我测试了一下,还是发现了问题,不过应该很容易修改了。
" }/ U% v7 [( u# g! u% y8 p7 \( O- x3 \4 C: Z, t5 m2 P. r' V
问题在于你对32bit tga图片字库还没有真正理解。
) v4 M, p: p5 x+ z, e9 y首先,我附上一个游戏里的32bit tga图片字库文件,你用2进制编辑器打开看一下就知道了。
+ p% n [; Q( B每个象素的前3个字节都是FF FF FF ,最后一个字节表示透明度,才有变化,是00-FF。
& H+ y5 ~* R: @6 | U
/ o& N5 a$ w* z' u# s32bit tga图片字库其实只是反映了一个白色的字体的各个部分的透明程度,它本身不反映颜色信息。+ p9 g# [# M# y( W; |0 U) w
那颜色从哪里来的呢?
- Q% k7 m7 ^. K% O! Y/ j3 q4 q颜色值其实是从游戏的配置文件里读取的,游戏把读取的颜色,比如说是黄色去替换32bit tga图片字库文件每个象素的前3个字节 FFFFFF ,然后配合最后一个字节,就在内存里生成了一张新的黄色字体的图片tga.用这张黄色字体的图片tga作为字体显示到屏幕上就得到了黄色的字体。同理,游戏的配置文件里设定的是红色的话,我们就能得到红色的字体。
' e7 i2 h9 p& x/ o4 C0 I& M/ R" |1 P, U" K8 V
32bit tga图片字库有点像photoshop里的遮罩的作用。
) L/ k4 S- ]8 p- ?* W4 Y0 R8 j; m1 L0 k9 C5 C7 q
好,明白了这些。我们回过头来看看2维码和条形码。
9 P9 o$ \/ v% b! k8 I其实非常简单了。
" V7 A; m, L2 o& I象素只分2种,有色象素和透明象素。
) F- |4 C$ u0 P; ~3 B% n& @( J: V! X4 m5 J
有色象素就是 FF FF FF FF
8 G1 B7 @4 `/ W9 x, p! @8 e1 L透明象素就是 FF FF FF 00
/ }% U. m, ~+ C$ k, s' K; \6 R& T: L {2 X5 m
当然,我们在识别2维码和条形码的时候也要预先知道,游戏设定了什么颜色来显示这个字体,然后才可能判断出这个2维码和条形码上面哪些才是有色点。0 a8 k) C* A1 q" Y$ ?0 \
, } N2 z2 X' y7 ?2 H; O& ~等会我还有些关于2维码的新东西要发布。
! W; F5 C1 D5 M7 Z
) p0 J, z+ ?# p1 A, [# H( c+ L明白了吗? |