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

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

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

经过一番研究,找到了底层的贴图函数之后,加入了一个写中文字符串的函数,% Q5 ^/ w( q& \, V3 N: }
目前已经可以往屏幕上写中文字符串了。
  l) U/ X. Y$ n9 s$ j" [6 l. S8 g& h3 K
汉化抓图" r8 k% t9 Y* k

; l0 s0 O# {" I2 X( y! P+ X- ]3 r; ~% a1 K$ m% k, D9 V
代码
$ A8 ~& o6 G" U. U2 w- H# Kbackends\graphics\opengl\texture.cpp
' h3 ]5 L0 R8 Z- @. E
  1. void Surface::copyRectToTexture(uint x, uint y, uint w, uint h, const void *srcPtr, uint srcPitch) {
    ) F5 a2 r. s8 ^% d/ S% ^7 o' |
  2.         copyRectToTextureOld(x, y, w , h , srcPtr, srcPitch);, o6 `+ Z0 R% h3 L% d7 p
  3.         //add by shane007
    1 c, k, ^8 \- J
  4.         drawStringToSurface();
    8 m7 x9 X) c2 ~, h4 P% f4 }
  5. }
    . g9 @0 f" |' |7 {# E
  6. # V, d0 R! ?% u; ]) Q
  7. //add by shane0079 R8 _7 W# q' K( J
  8. void Surface::drawStringToSurface() {
    . p. n3 C/ }; a% H' N' t3 @! Y" x
  9. 9 c3 S5 C5 c9 J  K% G+ G4 e  B
  10.         Graphics::Surface *dstSurf = getSurface();2 }3 \9 H( t3 E& g
  11.         // 在Surface上显示字符串
    0 {1 Z( \4 q  f' {' m0 W
  12.         int x = 100;& i6 ]3 d" N: O& C# u) V
  13.         int y = 300;4 z, }& O5 x0 E( R
  14.         int charWidth = 16;: u4 k, @! [. J* G
  15.         int charHeight = 16;
    ) ~3 s, b0 t, n' l( O
  16.         int color = 0x0000ff; //0x00BBGGRR
    6 Y7 W: C9 ^! V! ?( \' ^2 F" A
  17.         const uint pitch = dstSurf->pitch;6 T! S) U$ a, l2 P
  18.         const uint bytesPerPixel = dstSurf->format.bytesPerPixel;" i/ F' {7 Q* |9 [4 H

  19. 0 |/ o# Z5 D6 N0 O) `0 g0 ?1 n  U
  20.         unsigned char *dst;
    $ z- u1 p2 C& h! @% i
  21.         const char *str = "中文测试";* F& I2 |! o. B& ^  }4 k- P. }

  22. + b. ^# K3 \5 B0 e7 W
  23.         for (int i = 0; str[i] != '\0'; i = i+2) {
    : B& B, f6 S& R4 x2 |6 u% g9 x$ S
  24.                 int ch = (unsigned char)str[i];+ a& Q9 y) E+ |- l0 t% d! y' F
  25.                 int ch2 = (unsigned char)str[i + 1];6 q6 i3 l! J6 N
  26.                 int idx = (ch - 0xa1) * 94 + (ch2 - 0xa1);
    ! }: X* [6 ?6 o
  27.                 const unsigned char *fontData = hzk16_data + 32 * idx;
    ) x( J& Z9 r1 _+ P& v
  28.                 dst = (unsigned char *)dstSurf->getPixels() + y * pitch + (x + (i/2) * charWidth) * bytesPerPixel;
    ( l; f/ X# I# p6 I0 E; \6 ~+ I" t: U
  29. ( h  W' I  X3 x
  30.                 for (int row = 0; row < charHeight; ++row) {% U4 \( L* _9 E1 ~5 A6 B0 v" P
  31.                         for (int col = 0; col < charWidth; ++col) {
    - z: y7 m3 X# {8 b* m
  32.                                 unsigned char pixelByte = fontData[row * 2 + col / 8];          // 每行对应2个字节: C0 n& C/ q6 D
  33.                                 unsigned char pixelBit = (pixelByte >> (7 - (col % 8))) & 0x01; // 提取像素对应的位  ]. `  y8 p( Q' i* _1 g9 C

  34. % @! `9 C7 R) ]" \/ S0 Y9 h
  35.                                 if (pixelBit == 1) {. |& ^' C! r3 K
  36.                                         // 设置像素颜色
    5 F. ~+ I& S9 p$ ~, j
  37.                                         uint32 *pixel = (uint32 *)dst;3 h  {; t: n  E5 H. L2 G. g
  38.                                         *pixel = color;- k0 e5 o' p9 s; u: C( I+ w4 w8 \
  39.                                 }
    # o8 G, d$ O& @7 R9 B5 |
  40.                                 dst += bytesPerPixel;
    * h7 z9 C* n6 d0 g- c  J- `' Y
  41.                         }
    2 T+ @+ A) x1 \
  42.                         dst += pitch - charWidth * bytesPerPixel; // 跳到下一行的起始位置
    $ F* V6 f2 X+ d, k
  43.                 }0 x6 Y1 b# w9 i& }3 e& ^
  44.         }5 j. X2 Z$ s7 i* W/ \& T
  45. }
复制代码
$ M: N& }. p+ C

6 P" A  ]" I. |- m

本帖子中包含更多资源

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

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

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