我测试了一下,还是发现了问题,不过应该很容易修改了。
8 H7 k& k- d) q! z/ {' n5 c: _0 F3 n7 _, C* ^; J+ T( E
问题在于你对32bit tga图片字库还没有真正理解。
' {+ N! `. y& w$ A5 {8 s首先,我附上一个游戏里的32bit tga图片字库文件,你用2进制编辑器打开看一下就知道了。
6 z- ^$ R S: v" G1 w每个象素的前3个字节都是FF FF FF ,最后一个字节表示透明度,才有变化,是00-FF。: _% s1 N/ H) p# t* C/ y3 J' i, O
7 ^, r6 C2 Z: X& o/ E. g32bit tga图片字库其实只是反映了一个白色的字体的各个部分的透明程度,它本身不反映颜色信息。
9 c! |& y7 R8 B3 W' B那颜色从哪里来的呢?( O) i% j- p) X: v& Y
颜色值其实是从游戏的配置文件里读取的,游戏把读取的颜色,比如说是黄色去替换32bit tga图片字库文件每个象素的前3个字节 FFFFFF ,然后配合最后一个字节,就在内存里生成了一张新的黄色字体的图片tga.用这张黄色字体的图片tga作为字体显示到屏幕上就得到了黄色的字体。同理,游戏的配置文件里设定的是红色的话,我们就能得到红色的字体。& O' e. M& x) ?! m+ {7 _
/ Z/ {: R: E, Q32bit tga图片字库有点像photoshop里的遮罩的作用。6 C7 F8 O1 i6 F, t
% B+ @3 \% B6 f0 ?7 [1 ]
好,明白了这些。我们回过头来看看2维码和条形码。' v" _7 P/ B5 A
其实非常简单了。' r9 B9 y/ N2 X( n* U3 X' ^9 Y
象素只分2种,有色象素和透明象素。
. T% o( }* e& o2 Z
1 @- Y& ?$ U+ I; I6 h$ J5 R有色象素就是 FF FF FF FF/ z( ~; A0 ~1 j L
透明象素就是 FF FF FF 00
; [# j7 d8 h7 a" E" Q7 W2 Q5 h' @0 R8 Q/ V9 F( W
当然,我们在识别2维码和条形码的时候也要预先知道,游戏设定了什么颜色来显示这个字体,然后才可能判断出这个2维码和条形码上面哪些才是有色点。2 \: u% r W E( @3 H
# R* s: k& `5 ?8 `等会我还有些关于2维码的新东西要发布。& Q% p6 g- ^3 K$ ]" g$ G
. C- B+ Y$ e( I7 U/ }明白了吗? |