经过一番研究,找到了底层的贴图函数之后,加入了一个写中文字符串的函数,) ^4 ]5 S, _, k2 j, M: L' S
目前已经可以往屏幕上写中文字符串了。% @; L* e4 O; A' M8 K
; e9 E) C) R8 N. d& [# H' b* ]
汉化抓图0 E. q7 t- W0 j$ f# x
: L' `! G; Q! Q) S* B4 d4 Y. T2 u8 N, t. R9 N2 V- {( ] q
代码
5 b, ^& X1 e" Z2 i! E7 L/ lbackends\graphics\opengl\texture.cpp
- S7 _3 A, {7 Q+ s- void Surface::copyRectToTexture(uint x, uint y, uint w, uint h, const void *srcPtr, uint srcPitch) {9 H7 q0 i& ?- z/ N
- copyRectToTextureOld(x, y, w , h , srcPtr, srcPitch);
+ z5 D/ z) |6 h+ Q2 [ - //add by shane0072 N; ?2 Z+ x% k4 T+ C' h" N
- drawStringToSurface();
4 H# |! _ t! j+ n9 @ - }
, ^, z6 |; n: w* k2 W" K$ s3 F - ( s3 B% g F% ]2 W, k7 O
- //add by shane007
* p+ I# G+ k- y3 }- \) f8 V6 F - void Surface::drawStringToSurface() {
! s9 c. B8 |* `4 }+ u/ {2 I - ' C! d9 M3 {1 a# x* v! ^% Z
- Graphics::Surface *dstSurf = getSurface();+ X- c2 o/ v% i: m7 R/ }
- // 在Surface上显示字符串
; F9 L0 `2 E( b2 r! B - int x = 100;
( S) M3 E" A- p/ Q5 b - int y = 300;
5 W( y3 }. {' R5 }6 R: _ - int charWidth = 16;: T# D9 i% @2 u- t& G
- int charHeight = 16;: ]. p! v! {2 E; l& |0 D% g# K
- int color = 0x0000ff; //0x00BBGGRR5 a8 D! P7 w2 ~' a" W
- const uint pitch = dstSurf->pitch;
, @! i% {! }. [& v W5 H+ f - const uint bytesPerPixel = dstSurf->format.bytesPerPixel;8 X4 E7 f) t+ l1 X# F8 r. \; n
2 {2 ~; p: h# U2 K D- unsigned char *dst;" \* i/ G1 o6 A- V6 Z+ u
- const char *str = "中文测试";
, L" `6 k. ~$ x; i5 y6 }: a( q - $ M$ m7 j2 l( u- e% h. w) H4 j
- for (int i = 0; str[i] != '\0'; i = i+2) {
, W _5 q& _3 B6 R: V; ` - int ch = (unsigned char)str[i];. t, P/ A2 x/ R( _. G) s
- int ch2 = (unsigned char)str[i + 1];$ d1 q. j% \$ e' H5 Q0 D; ^( T" A
- int idx = (ch - 0xa1) * 94 + (ch2 - 0xa1);
5 \( f: O# g8 i0 k1 U7 H - const unsigned char *fontData = hzk16_data + 32 * idx;
4 D5 j- Z: _: `+ Y2 @ m2 t - dst = (unsigned char *)dstSurf->getPixels() + y * pitch + (x + (i/2) * charWidth) * bytesPerPixel;% D1 l0 Z( E5 Z5 ?1 ~ J+ ?: I
' j/ P# H# s, O8 j1 o8 ~- for (int row = 0; row < charHeight; ++row) {
( q! }0 q' N- T# `. W Z - for (int col = 0; col < charWidth; ++col) {2 J) \$ N& j; D$ M
- unsigned char pixelByte = fontData[row * 2 + col / 8]; // 每行对应2个字节6 L+ o* P) F5 f& o! A
- unsigned char pixelBit = (pixelByte >> (7 - (col % 8))) & 0x01; // 提取像素对应的位
/ y& ^ u4 \" N) j# ^
+ Y& J5 h. h c& e$ \! f- if (pixelBit == 1) {. s' H, A! G* R @& P1 F
- // 设置像素颜色
& T, A3 E" _- K' j - uint32 *pixel = (uint32 *)dst;) H, \3 H. ~) f+ S
- *pixel = color;
% T( n' r" x z0 U$ I7 h9 K% X+ o; \ - }% s3 l2 `6 r. m6 m: O
- dst += bytesPerPixel;, a+ O; b! N" L6 J! {3 T9 j
- }, d3 X/ S4 }5 N9 d( ]9 E
- dst += pitch - charWidth * bytesPerPixel; // 跳到下一行的起始位置; o( t/ F9 w$ o
- }4 Z0 [% s! `" Z' n
- }; m; z( B$ A# k
- }
复制代码 / H) P& p9 _* U0 k' z$ W
9 K G( p* B7 t% p: ~. _+ w# @+ u
|