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

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

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

经过一番研究,找到了底层的贴图函数之后,加入了一个写中文字符串的函数,8 H5 I- w+ ?  `! [
目前已经可以往屏幕上写中文字符串了。
  T# u! u2 r8 G, s3 D& X* G% p5 `
4 `" w' @/ C/ k3 \汉化抓图
4 d' a4 z2 w. K* e# d2 H
/ k, |! @! w. [1 L. c, _$ G9 v3 v. d$ ~
代码1 N7 {2 q( y0 ^
backends\graphics\opengl\texture.cpp9 K4 ~9 E, `" }8 v' r
  1. void Surface::copyRectToTexture(uint x, uint y, uint w, uint h, const void *srcPtr, uint srcPitch) {
    % h9 O3 d3 X% P! {2 X
  2.         copyRectToTextureOld(x, y, w , h , srcPtr, srcPitch);
    & u# F: S% a5 F, z9 I4 e: t
  3.         //add by shane007
    ( N' \. n/ ?( G% E
  4.         drawStringToSurface();  _7 }( w* ~1 e/ R  d, P
  5. }
    $ L' V5 S: E5 ?& w5 _; s. E) y

  6. 1 Z5 d' d, F; z2 e% \& g/ D
  7. //add by shane007
    4 Q. o( r, u/ M
  8. void Surface::drawStringToSurface() {
    : P8 N! j1 T' x5 n0 y+ E" y

  9. * ~7 d" M5 ]) a& q# ]
  10.         Graphics::Surface *dstSurf = getSurface();# D+ |# y  ^' r- ^
  11.         // 在Surface上显示字符串1 Q) P; a& ?/ ^2 t0 _
  12.         int x = 100;
    . O3 W1 D1 @. e/ n4 U
  13.         int y = 300;4 e. G! a. K+ x% c
  14.         int charWidth = 16;
    9 ?7 e. r5 J! f+ D! q
  15.         int charHeight = 16;
    ! i4 Q' N1 _! }( X+ Z7 g
  16.         int color = 0x0000ff; //0x00BBGGRR
    , U: M, `8 [: d: I- ]0 h; \' A. J" _
  17.         const uint pitch = dstSurf->pitch;1 j$ s% \/ F; H7 N  ]( _
  18.         const uint bytesPerPixel = dstSurf->format.bytesPerPixel;
    1 k( j+ ?9 C' G3 X8 S- N9 J

  19. $ I: v0 h' w# l  C8 M! S
  20.         unsigned char *dst;6 C/ g6 ~4 r% v* h/ \: D* P
  21.         const char *str = "中文测试";8 u, ^! v$ Q, n

  22. 0 C+ w1 E( q/ S; T$ d. i
  23.         for (int i = 0; str[i] != '\0'; i = i+2) {
    9 p  Y% B1 z& N8 P" ]( r4 u/ H( R
  24.                 int ch = (unsigned char)str[i];
    $ z; w" O6 S( q9 r* E7 z& U
  25.                 int ch2 = (unsigned char)str[i + 1];3 C7 L6 h, L8 j; P
  26.                 int idx = (ch - 0xa1) * 94 + (ch2 - 0xa1);
    ' T; [7 `0 ~9 r6 W/ }: J4 |  u
  27.                 const unsigned char *fontData = hzk16_data + 32 * idx;* A. j7 t" J3 }6 m9 ?
  28.                 dst = (unsigned char *)dstSurf->getPixels() + y * pitch + (x + (i/2) * charWidth) * bytesPerPixel;
    0 r% J& [; D9 J- S
  29. 7 i9 p6 i8 P8 s( H; n
  30.                 for (int row = 0; row < charHeight; ++row) {5 ?8 m7 p/ B" b: L
  31.                         for (int col = 0; col < charWidth; ++col) {
    ! d: M( r# ~9 R" F3 a
  32.                                 unsigned char pixelByte = fontData[row * 2 + col / 8];          // 每行对应2个字节1 y) W5 a0 v" q! w9 j+ _- f
  33.                                 unsigned char pixelBit = (pixelByte >> (7 - (col % 8))) & 0x01; // 提取像素对应的位+ p, ~7 Q5 {( U9 Q" I) o

  34. " P3 U/ p! T$ s' ?; ]
  35.                                 if (pixelBit == 1) {
    3 T: t3 O: R; z% c5 p
  36.                                         // 设置像素颜色
    ; T  U1 l1 J/ ?4 r
  37.                                         uint32 *pixel = (uint32 *)dst;& i6 k% _0 X# I' u+ r
  38.                                         *pixel = color;
    " T- K$ S2 F/ l( C0 _. ?
  39.                                 }
    4 a! t. F' Q* g$ A+ u# z1 C
  40.                                 dst += bytesPerPixel;- H9 }2 N8 B' @% n( d6 f# h% P7 {; J3 @
  41.                         }1 R0 b" P  a6 T  {2 I
  42.                         dst += pitch - charWidth * bytesPerPixel; // 跳到下一行的起始位置3 W$ x5 X" H- K. Z" |
  43.                 }% @) a+ q+ l5 C  h
  44.         }* P: l+ M  z* T
  45. }
复制代码
$ B8 }& u7 u( C# ]3 H( o5 ]2 u
* J' l4 i' q% }. o1 ?" [, q

本帖子中包含更多资源

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

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

使用道具 举报

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

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