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

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

[复制链接]
查看: 342|回复: 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 汉化抓图

经过一番研究,找到了底层的贴图函数之后,加入了一个写中文字符串的函数,
. M2 u: X$ @0 \6 p1 k0 ?目前已经可以往屏幕上写中文字符串了。: K  S% r. i' j
' d# P+ R9 Y- G  _3 f
汉化抓图% \: f' ~  a# a% V: u# J1 T
: C2 \& x- k: n* G& b4 h" x

9 a* E& N' O" F0 t$ x* l" f+ N代码
# d* R& R! @& _: vbackends\graphics\opengl\texture.cpp" |5 i1 ]7 l9 |8 V2 A( }
  1. void Surface::copyRectToTexture(uint x, uint y, uint w, uint h, const void *srcPtr, uint srcPitch) {
    & R( m2 M' p) \: l; o9 S. p+ W
  2.         copyRectToTextureOld(x, y, w , h , srcPtr, srcPitch);
    - @: b4 U# [" D" ~9 w5 C
  3.         //add by shane0071 q6 c( S) h1 A- y# ]: a
  4.         drawStringToSurface();0 Z8 v2 e4 D( g+ e: _. F
  5. }
    ( ?" L6 o+ g( h2 z/ o6 L9 w

  6. 6 f: u9 \! A& T
  7. //add by shane007
    3 ~  T& S0 Q: X  t3 ]/ u
  8. void Surface::drawStringToSurface() {: \5 l( z4 N. a, ^  t

  9. 7 \# F- Y- q' ^) N* w
  10.         Graphics::Surface *dstSurf = getSurface();/ e# a& q0 l3 x9 }& E& r# Z
  11.         // 在Surface上显示字符串
    3 ]9 K: w+ W# F. z
  12.         int x = 100;
    ; a, W" @) _6 C8 R! l
  13.         int y = 300;
    * A8 J" O6 M$ J3 @: X5 a% c
  14.         int charWidth = 16;
    8 t' v5 `; w& q3 {6 r9 R" F
  15.         int charHeight = 16;# i7 M6 M: N7 r' G
  16.         int color = 0x0000ff; //0x00BBGGRR
    ( b8 Y+ j" R4 Q! n+ r( Z
  17.         const uint pitch = dstSurf->pitch;
    4 I6 k- Z* b; |* ~
  18.         const uint bytesPerPixel = dstSurf->format.bytesPerPixel;
    6 G# c1 {% h/ ~

  19. & B0 J/ n: n: E. M8 f  m
  20.         unsigned char *dst;3 l7 C: i8 W% }) a4 w9 H
  21.         const char *str = "中文测试";  S7 P- R6 ^6 ^$ O% C
  22. 5 D) k( h3 I1 Q3 ~0 {, {+ l9 `
  23.         for (int i = 0; str[i] != '\0'; i = i+2) {
    . E  T* z/ o% U' H$ H. N. a
  24.                 int ch = (unsigned char)str[i];# q0 J6 e, E" Z8 S' c6 [
  25.                 int ch2 = (unsigned char)str[i + 1];0 t) Z0 B5 Y1 h# y1 a
  26.                 int idx = (ch - 0xa1) * 94 + (ch2 - 0xa1);
    " s5 R! J; n: Y/ v
  27.                 const unsigned char *fontData = hzk16_data + 32 * idx;
    1 U7 C2 M( s" c3 o( G( z) {! W
  28.                 dst = (unsigned char *)dstSurf->getPixels() + y * pitch + (x + (i/2) * charWidth) * bytesPerPixel;
    ( s7 a2 g) L) D2 c7 ]- S

  29. % b) }+ z' I4 [- N
  30.                 for (int row = 0; row < charHeight; ++row) {: H; c" K, R  J
  31.                         for (int col = 0; col < charWidth; ++col) {$ F4 |+ p/ x" D% E6 ?* }4 r1 N6 k
  32.                                 unsigned char pixelByte = fontData[row * 2 + col / 8];          // 每行对应2个字节
      R7 F( H# a8 Q% U; ?
  33.                                 unsigned char pixelBit = (pixelByte >> (7 - (col % 8))) & 0x01; // 提取像素对应的位
    7 J. H: x; z9 T# W$ s2 U
  34. 0 l$ ~1 L7 t  M+ x
  35.                                 if (pixelBit == 1) {& n1 V" t( [% ]! f
  36.                                         // 设置像素颜色7 p8 T. O1 L: X8 @# c% P
  37.                                         uint32 *pixel = (uint32 *)dst;7 P" E3 s9 i, L* [! ]
  38.                                         *pixel = color;! g) |* ?. _7 z- c* s
  39.                                 }
    ' U" l, a5 ?. e; p5 }3 l6 `
  40.                                 dst += bytesPerPixel;# ~/ O8 @9 Y6 S1 Z8 S, u/ j
  41.                         }  u# g, Q6 {7 Q$ ]' D8 ]4 _: l" w4 S
  42.                         dst += pitch - charWidth * bytesPerPixel; // 跳到下一行的起始位置! D$ ~  R6 S1 y& `
  43.                 }
    , ?  Q/ _+ {' v
  44.         }, R' O4 z6 H' P# C
  45. }
复制代码
9 P0 S1 T. q( J% @" B7 F$ D' }$ Q
( a, x, l% b# x0 A' P

本帖子中包含更多资源

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

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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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