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

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

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

经过一番研究,找到了底层的贴图函数之后,加入了一个写中文字符串的函数,
% E- I( W  i1 v1 \, R& V目前已经可以往屏幕上写中文字符串了。
1 y* W, x5 [7 o  v; k* C0 ^2 G, x: _  f: T" ]
汉化抓图$ u6 z% K  a: O4 P' v' P
8 d" P7 W4 ~, T, O7 @1 l; N! `
) O; D6 [2 n7 v& D
代码
% Y' {$ |  x& G1 ]$ u( L2 j. jbackends\graphics\opengl\texture.cpp# O0 V" m" A/ W7 |  U. ~2 S
  1. void Surface::copyRectToTexture(uint x, uint y, uint w, uint h, const void *srcPtr, uint srcPitch) {+ Q# D) b9 p& L4 a1 P" E2 y
  2.         copyRectToTextureOld(x, y, w , h , srcPtr, srcPitch);
    ' e! z1 Y  C2 `* V
  3.         //add by shane007! r7 Z8 m$ p9 q1 N0 \$ g$ e
  4.         drawStringToSurface();
    , ]" Q$ g# u( Q8 b3 l/ N1 ~! @( f
  5. }) F+ G; s& d8 v
  6. $ N6 ?$ [- o1 h
  7. //add by shane0074 B7 r: z  F7 M: c# H0 g( z5 [  T7 C
  8. void Surface::drawStringToSurface() {
    7 |0 ^% z% J% V5 D

  9. 8 h' D, {8 C7 |. a5 L! C' h4 t" {
  10.         Graphics::Surface *dstSurf = getSurface();
    ) ^2 q+ Y7 q6 X7 t- t# z
  11.         // 在Surface上显示字符串
    ) z  ~' r( H. v2 A, G: O
  12.         int x = 100;4 x" X8 D- Y4 v& i" z3 t
  13.         int y = 300;- M, [' ]$ `! C4 [
  14.         int charWidth = 16;. a: M& Q' g4 B: e" Z: F7 r1 |" c
  15.         int charHeight = 16;
    - G6 ?8 h$ ]3 \! M/ M
  16.         int color = 0x0000ff; //0x00BBGGRR
    # K. y+ ?: J: f" a1 m6 b/ f( J
  17.         const uint pitch = dstSurf->pitch;
    % j5 g/ d7 H6 _% f# ~! B5 i$ p$ j
  18.         const uint bytesPerPixel = dstSurf->format.bytesPerPixel;, C" \* F0 w9 s# [; O% v- g

  19. 4 q- G3 d- |4 F, S
  20.         unsigned char *dst;9 d2 }% B  s% O1 _
  21.         const char *str = "中文测试";
    ' d2 L' [; Y& b9 O
  22. 5 k+ b5 Q$ D8 H
  23.         for (int i = 0; str[i] != '\0'; i = i+2) {# x/ _# y0 Q' h3 z+ c& w
  24.                 int ch = (unsigned char)str[i];
    3 M% Z* t7 C4 y& x) F( G6 d
  25.                 int ch2 = (unsigned char)str[i + 1];+ c! Y% O. v# j; l
  26.                 int idx = (ch - 0xa1) * 94 + (ch2 - 0xa1);
    # z( D" {! p# Y: _2 h
  27.                 const unsigned char *fontData = hzk16_data + 32 * idx;% @2 k5 Y( W- X# N0 d4 g$ S
  28.                 dst = (unsigned char *)dstSurf->getPixels() + y * pitch + (x + (i/2) * charWidth) * bytesPerPixel;
    $ T: f8 T% c) G% F1 a$ J
  29. * _  L4 Q3 Y+ x6 n- `- e  Q
  30.                 for (int row = 0; row < charHeight; ++row) {
    & o+ D7 Q2 O0 y* C/ L9 c
  31.                         for (int col = 0; col < charWidth; ++col) {1 z+ a, F2 U$ M8 \& L$ M4 _
  32.                                 unsigned char pixelByte = fontData[row * 2 + col / 8];          // 每行对应2个字节8 U* W" `' u# t
  33.                                 unsigned char pixelBit = (pixelByte >> (7 - (col % 8))) & 0x01; // 提取像素对应的位
    7 w; Q  w* Q! H- y  |5 b

  34. * p; C( t+ I4 o+ s, V& |( R
  35.                                 if (pixelBit == 1) {3 x3 p) a' T! S8 X2 N7 N& O
  36.                                         // 设置像素颜色& G  s" H1 z2 a" g  g
  37.                                         uint32 *pixel = (uint32 *)dst;
    ) j- U6 `7 {3 H: J
  38.                                         *pixel = color;. x7 z% G8 q( R, O# K+ P6 }' x8 R* a
  39.                                 }
    5 U. b: D* ~  S3 W9 c- i
  40.                                 dst += bytesPerPixel;  ?1 ?: z3 B, _
  41.                         }
    % K1 o: H& f. j; V8 @9 a
  42.                         dst += pitch - charWidth * bytesPerPixel; // 跳到下一行的起始位置$ }' B" {2 Y3 T6 O
  43.                 }6 H. j* \1 H+ Y% T% r7 G
  44.         }
    / L* }5 b9 R3 }
  45. }
复制代码

, T( Z. Z3 V9 A' @1 Z6 T: }" E" c- c+ [- D: F8 j/ G

本帖子中包含更多资源

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

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

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