设为首页收藏本站官方微博

建议 【Scummvm汉化 #5】 Phantasmagoria 2 - A Puzzle of Flesh 幽魂2#3 汉化抓图

[复制链接]
查看: 287|回复: 1
打印 上一主题 下一主题

[建议] 【Scummvm汉化 #5】 Phantasmagoria 2 - A Puzzle of Flesh 幽魂2#3 汉化抓图

跳转到指定楼层
楼主
发表于 2023-8-21 17:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

【Scummvm汉化 #5】 Phantasmagoria 2 - A Puzzle of Flesh 幽魂2#3 汉化抓图

经过一番研究,找到了底层的贴图函数之后,加入了一个写中文字符串的函数,
' V  B% c: ]9 H目前已经可以往屏幕上写中文字符串了。
9 ^" U! m1 F3 D6 w$ ?
) j7 y7 }7 M* z" F. b. P8 O/ I- d4 k" @汉化抓图
/ [+ V5 s) Q, n& d. t( U2 l' X4 Q& s, a
7 j$ Z; O) I. Q. J$ l" S0 o7 {8 w
代码
" G- @! \. T" U3 P1 cbackends\graphics\opengl\texture.cpp
# h' g6 R* t1 X" B$ i
  1. void Surface::copyRectToTexture(uint x, uint y, uint w, uint h, const void *srcPtr, uint srcPitch) {8 p7 Y) B' f* S1 s- ?% J, d+ i
  2.         copyRectToTextureOld(x, y, w , h , srcPtr, srcPitch);
    # q3 D" C, S% @' c6 o
  3.         //add by shane007
    ) v9 s( H  n$ t% |% j0 p  _0 d8 c
  4.         drawStringToSurface();
    6 j5 ^: E" a3 Q* ]% K  @2 @
  5. }
    ( g) l. I! R# s$ n" ]
  6. ; i/ R, A1 B2 D; L+ a" p7 A
  7. //add by shane007
    7 J+ Q* p1 \9 K% k
  8. void Surface::drawStringToSurface() {, H3 j7 W% J1 ~" |# w
  9. 1 [1 H  X* R  t+ `6 P" p
  10.         Graphics::Surface *dstSurf = getSurface();
    2 E' G1 @" ?, ?( Y5 [! |3 j1 S5 |
  11.         // 在Surface上显示字符串6 Z" N3 e6 }9 h" ~
  12.         int x = 100;( f& A5 c( [3 G% g  J5 z
  13.         int y = 300;5 }6 ]( l% _; z- g' I, s+ b# i
  14.         int charWidth = 16;
    ; A% @( U3 l: |* X/ @  v- e5 j
  15.         int charHeight = 16;
    " p) J/ H8 R) k2 R+ p$ y
  16.         int color = 0x0000ff; //0x00BBGGRR
    1 D. M0 @9 p+ e
  17.         const uint pitch = dstSurf->pitch;
    - n9 s1 N8 k3 p7 M" N1 K/ z; b
  18.         const uint bytesPerPixel = dstSurf->format.bytesPerPixel;7 E, K1 B. a2 H% B0 o" d6 R
  19. 4 r: q5 A3 w( r" w; l/ J- l
  20.         unsigned char *dst;* b2 Z# B0 C+ m1 M( C
  21.         const char *str = "中文测试";' R1 n. `2 t$ f
  22. $ l# f: I% _1 |4 W* w+ Y% h! U
  23.         for (int i = 0; str[i] != '\0'; i = i+2) {
    8 l+ j+ \% T4 O& G4 _& A
  24.                 int ch = (unsigned char)str[i];
    3 F" Y/ G( j, L3 z/ z1 Y" j! L) l
  25.                 int ch2 = (unsigned char)str[i + 1];
    : V8 R& p6 K+ K0 n( ?, ^  V. @
  26.                 int idx = (ch - 0xa1) * 94 + (ch2 - 0xa1);
    7 d" e, }$ Y3 B/ K+ S/ F
  27.                 const unsigned char *fontData = hzk16_data + 32 * idx;
    6 M% A# |0 c& V% L) l
  28.                 dst = (unsigned char *)dstSurf->getPixels() + y * pitch + (x + (i/2) * charWidth) * bytesPerPixel;/ _9 n; |) ?( B  e* d/ \3 |4 g
  29. ( d5 w6 v$ W& ]8 l" S
  30.                 for (int row = 0; row < charHeight; ++row) {. f9 `1 F" [2 {# _$ {
  31.                         for (int col = 0; col < charWidth; ++col) {
    , E% b/ i1 k- ~! N( d
  32.                                 unsigned char pixelByte = fontData[row * 2 + col / 8];          // 每行对应2个字节
    ( ^! g, [0 n. Z/ d/ O$ M
  33.                                 unsigned char pixelBit = (pixelByte >> (7 - (col % 8))) & 0x01; // 提取像素对应的位
    ' `7 s2 {) Z7 C3 Y( f3 I
  34. 3 o4 A) B! l, d3 y2 X0 L( g5 f
  35.                                 if (pixelBit == 1) {: K( W7 W# {, t
  36.                                         // 设置像素颜色- N- |2 r4 z% P
  37.                                         uint32 *pixel = (uint32 *)dst;
    5 B+ `2 g4 {7 E% r
  38.                                         *pixel = color;
    # p9 _) F' ]  Z) _
  39.                                 }
    ) D3 a( R, J! Y* \5 y1 Y" q/ M
  40.                                 dst += bytesPerPixel;
      x) L6 m* |3 n: P( s& ~: h9 H
  41.                         }/ N* j& u  i0 D/ h
  42.                         dst += pitch - charWidth * bytesPerPixel; // 跳到下一行的起始位置
      h7 U+ A0 W0 t; b% _
  43.                 }
    " |' {" n0 F1 k$ A. k# N
  44.         }9 D9 M# ^9 S$ }
  45. }
复制代码

: s  Y6 W& p7 m. r0 h  {
, f" f1 z' e. f: N( ?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2023-9-6 01:32 | 只看该作者
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

冒险解谜游戏中文网 ChinaAVG

官方微博官方微信号小黑屋 微信玩家群  

(C) ChinaAVG 2004 - 2019 All Right Reserved. Powered by Discuz! X3.2
辽ICP备11008827号 | 桂公网安备 45010702000051号

冒险,与你同在。 冒险解谜游戏中文网ChinaAVG诞生于2004年9月9日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

快速回复 返回顶部 返回列表