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

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

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

经过一番研究,找到了底层的贴图函数之后,加入了一个写中文字符串的函数,
3 _! {1 S8 |7 q/ x目前已经可以往屏幕上写中文字符串了。
9 c2 _, Q2 p" t2 n9 [- E1 z9 [5 h1 [, A3 \
汉化抓图
# e( ~  i3 p) m4 a
. b" d* C/ s7 ]6 d) B/ s, B$ H7 i
代码
% W0 t& J2 X' Z9 r' \9 r0 _' Qbackends\graphics\opengl\texture.cpp
: k" ?8 A" t/ ~, W
  1. void Surface::copyRectToTexture(uint x, uint y, uint w, uint h, const void *srcPtr, uint srcPitch) {
    ' B( I! y% l8 e9 L% B7 s
  2.         copyRectToTextureOld(x, y, w , h , srcPtr, srcPitch);6 P# V, Z' d7 K7 _0 S2 E% d
  3.         //add by shane0073 P) O0 `8 D6 H1 y
  4.         drawStringToSurface();4 b& V: @" U9 r8 t; P
  5. }
    1 w8 [8 I, I$ `+ X

  6.   M6 l' {) {' u3 y/ M
  7. //add by shane007( \- L- ~+ }) Q
  8. void Surface::drawStringToSurface() {$ @7 D9 [/ \& V1 b
  9. ; R, V. B. P9 l
  10.         Graphics::Surface *dstSurf = getSurface();* \% t, ?6 f8 X# T6 l! @
  11.         // 在Surface上显示字符串
    8 Q% \/ _! c8 v5 _) y
  12.         int x = 100;9 F" U+ V* v# [  e5 T( ]' Y
  13.         int y = 300;9 z( Y, Z4 B  s. |  g3 i* Z- u' g: W+ c
  14.         int charWidth = 16;( l4 g  ^2 [* H5 N
  15.         int charHeight = 16;9 R; T6 q' \8 v) j3 j: {: a( o1 O
  16.         int color = 0x0000ff; //0x00BBGGRR% B; ^$ @% s) j; v: F
  17.         const uint pitch = dstSurf->pitch;6 E9 e1 z8 a% s& c) ~/ Y0 e
  18.         const uint bytesPerPixel = dstSurf->format.bytesPerPixel;8 |% u% S: Z( A+ x% f% p. ~, S
  19. 1 J& p5 S1 t0 W! N( d; f9 G1 K
  20.         unsigned char *dst;  G( W1 q% }/ U: ]* R; w! @. q
  21.         const char *str = "中文测试";
    6 `% }4 q( v: {$ n1 o; }

  22. 3 |; j  |5 }( L7 v! H
  23.         for (int i = 0; str[i] != '\0'; i = i+2) {
    + ?6 n; \7 l/ B8 y3 V
  24.                 int ch = (unsigned char)str[i];. b- ^: T; @, L8 E7 J' G
  25.                 int ch2 = (unsigned char)str[i + 1];( Z: \$ E1 G3 k
  26.                 int idx = (ch - 0xa1) * 94 + (ch2 - 0xa1);5 P4 |. |7 |/ F# x. g5 U4 y
  27.                 const unsigned char *fontData = hzk16_data + 32 * idx;9 ?; M# A8 P1 L% \( @; i
  28.                 dst = (unsigned char *)dstSurf->getPixels() + y * pitch + (x + (i/2) * charWidth) * bytesPerPixel;
    ' E. W0 Q! E& n

  29. / u2 r& W' j* H% p* Z
  30.                 for (int row = 0; row < charHeight; ++row) {4 u$ x% G: z" Q" U0 N
  31.                         for (int col = 0; col < charWidth; ++col) {2 K6 _3 j0 ^, E1 L3 ~9 X
  32.                                 unsigned char pixelByte = fontData[row * 2 + col / 8];          // 每行对应2个字节$ G' `: v8 a8 ~. z$ t
  33.                                 unsigned char pixelBit = (pixelByte >> (7 - (col % 8))) & 0x01; // 提取像素对应的位0 C( e) o/ W+ x, S: x

  34. 4 E5 d# W8 y/ Z% ^
  35.                                 if (pixelBit == 1) {* y2 P1 \8 Y, m1 Z2 t% X
  36.                                         // 设置像素颜色% h0 m% s+ c! I/ z2 X
  37.                                         uint32 *pixel = (uint32 *)dst;
    $ C9 _) h7 T* s& Y: Q
  38.                                         *pixel = color;6 {6 c( A+ h) L7 P
  39.                                 }! H: n7 p. u5 t: o8 @
  40.                                 dst += bytesPerPixel;
    & y, d! v0 P. h$ V( v, ^2 M0 y, M
  41.                         }1 h+ _1 j3 A  G' z$ k4 P$ G1 M1 H% X4 B
  42.                         dst += pitch - charWidth * bytesPerPixel; // 跳到下一行的起始位置
    ) j" t1 h- s$ i) i% t/ z4 ?
  43.                 }
    % E+ B4 u, N, W2 B
  44.         }
    8 |$ G8 Z' U# S) N- v5 w0 Z
  45. }
复制代码
4 b3 w% D3 D" l5 i
% `( k! o1 b+ W

本帖子中包含更多资源

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

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

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