我测试了一下,还是发现了问题,不过应该很容易修改了。
5 i& r$ r8 r3 O$ v. u& Y: _2 M
, V6 h( V7 D) _2 |( B$ b& \问题在于你对32bit tga图片字库还没有真正理解。
& R$ p5 E0 M7 z& K. ]2 u" _: i首先,我附上一个游戏里的32bit tga图片字库文件,你用2进制编辑器打开看一下就知道了。 F5 J5 Q5 _5 i- c! `
每个象素的前3个字节都是FF FF FF ,最后一个字节表示透明度,才有变化,是00-FF。0 M+ P+ E! s0 n0 R) ^, @" W
, b( B/ z8 t! c$ Q, L% q v9 f32bit tga图片字库其实只是反映了一个白色的字体的各个部分的透明程度,它本身不反映颜色信息。
" r+ u X+ t1 B2 X+ Z) ^那颜色从哪里来的呢?* z* t {6 Y9 d2 t4 v
颜色值其实是从游戏的配置文件里读取的,游戏把读取的颜色,比如说是黄色去替换32bit tga图片字库文件每个象素的前3个字节 FFFFFF ,然后配合最后一个字节,就在内存里生成了一张新的黄色字体的图片tga.用这张黄色字体的图片tga作为字体显示到屏幕上就得到了黄色的字体。同理,游戏的配置文件里设定的是红色的话,我们就能得到红色的字体。
* M5 ?: P" U8 [2 T& p$ X# ~) `
! f& ]& R" J* o" l( g+ F0 {32bit tga图片字库有点像photoshop里的遮罩的作用。9 R9 n6 W% `2 K8 {2 n
0 W( G e. y+ r s3 m& l) r0 H2 w3 S
好,明白了这些。我们回过头来看看2维码和条形码。
8 j p4 \7 o9 G# s, i其实非常简单了。
" R" L4 P: Y8 d1 m象素只分2种,有色象素和透明象素。
, i- {" j2 \- E( D4 m+ n5 W- b* K" D9 M# }
有色象素就是 FF FF FF FF
& q+ I5 v1 ]% \* P透明象素就是 FF FF FF 00
9 c. F9 P; q/ E. H
' ^4 R& F1 d7 T0 y x. U. I当然,我们在识别2维码和条形码的时候也要预先知道,游戏设定了什么颜色来显示这个字体,然后才可能判断出这个2维码和条形码上面哪些才是有色点。& c! D& U7 b h/ S5 X6 a4 a
+ D& _# c3 Q9 ^* n: f0 f* H等会我还有些关于2维码的新东西要发布。; Z# P1 b( a! _5 M# U) q9 d! m
( [1 i! \! o7 I) n: C" s明白了吗? |