我测试了一下,还是发现了问题,不过应该很容易修改了。
E' W( S* f& T
, T9 M3 u$ E: M问题在于你对32bit tga图片字库还没有真正理解。; K+ Q5 P4 ^: u; g
首先,我附上一个游戏里的32bit tga图片字库文件,你用2进制编辑器打开看一下就知道了。
' O* |. w0 V, G! K每个象素的前3个字节都是FF FF FF ,最后一个字节表示透明度,才有变化,是00-FF。& ?+ E4 d& q2 V' L/ ^
8 O+ e0 l6 P( J) h32bit tga图片字库其实只是反映了一个白色的字体的各个部分的透明程度,它本身不反映颜色信息。0 R- @, c( |) W6 H4 Q
那颜色从哪里来的呢?( e `& z5 S( k& h% _ j
颜色值其实是从游戏的配置文件里读取的,游戏把读取的颜色,比如说是黄色去替换32bit tga图片字库文件每个象素的前3个字节 FFFFFF ,然后配合最后一个字节,就在内存里生成了一张新的黄色字体的图片tga.用这张黄色字体的图片tga作为字体显示到屏幕上就得到了黄色的字体。同理,游戏的配置文件里设定的是红色的话,我们就能得到红色的字体。
( n' q* }$ M6 y! _1 u
7 U- n, s1 w$ s) E32bit tga图片字库有点像photoshop里的遮罩的作用。; W- Z6 U H0 a8 f/ s2 V
: z, Y5 ?+ M+ i3 x: O9 q% ~4 `好,明白了这些。我们回过头来看看2维码和条形码。
# A; z P" {% D- @7 p3 P其实非常简单了。
s2 P8 U. n' y" x3 m; F9 v象素只分2种,有色象素和透明象素。( S9 |* S7 _- g( A5 ^5 }! S" D2 ^
6 j: ?% c& R% G$ L8 W# ^# g3 j有色象素就是 FF FF FF FF |- @9 T1 q# o) u N
透明象素就是 FF FF FF 00
6 l% m. U! z" D! j4 K& l2 `7 R6 G. n2 u. v Q# q
当然,我们在识别2维码和条形码的时候也要预先知道,游戏设定了什么颜色来显示这个字体,然后才可能判断出这个2维码和条形码上面哪些才是有色点。5 U9 K1 S0 J4 m
, N; I' E% ?) T- a% O0 x* F
等会我还有些关于2维码的新东西要发布。
! i9 W4 m9 h0 Q
3 u; a$ ?# C% D! _" @# a! Q; k; @明白了吗? |