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

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

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

经过一番研究,找到了底层的贴图函数之后,加入了一个写中文字符串的函数,
" [* C& @4 Q9 K- r4 o5 ]目前已经可以往屏幕上写中文字符串了。8 t$ H$ z& t. D+ X* e4 G

' w9 D' l' E7 n  j- J" o( C% t汉化抓图
3 g" h5 `4 Q( X: t' E" i& k, ?1 J. _

$ z2 F9 P7 _) {% x代码
9 l' R& s: ]6 ^1 f4 N! ^backends\graphics\opengl\texture.cpp8 m/ c: l/ [) |0 e0 e
  1. void Surface::copyRectToTexture(uint x, uint y, uint w, uint h, const void *srcPtr, uint srcPitch) {
    & q/ o% G% P* i0 F! K4 F. x
  2.         copyRectToTextureOld(x, y, w , h , srcPtr, srcPitch);4 b; c( z( x' H
  3.         //add by shane007- Y: o( I" W, P% F. [
  4.         drawStringToSurface();* U: Q$ k2 `4 M3 P$ A9 U: ^
  5. }5 `  ~5 s. X( X# H8 ^
  6. % Y) W4 Y* M# r
  7. //add by shane007
    " G4 w0 c2 c. B6 ^7 P1 p
  8. void Surface::drawStringToSurface() {
    . y8 ^7 r# p1 |4 U+ v# g7 f7 ]

  9. ( v: P1 i& }( ], s. H# g1 A
  10.         Graphics::Surface *dstSurf = getSurface();
    1 F8 ~: g2 |/ O
  11.         // 在Surface上显示字符串
    9 N7 Z; \+ e) |4 l$ M$ s1 g0 l
  12.         int x = 100;# G4 b' G. F& j1 y. @8 {
  13.         int y = 300;, {* r1 t! X/ S! ^; w2 s7 E9 \
  14.         int charWidth = 16;
    ; x) I* m' H# {7 E5 \3 S& B$ D9 L
  15.         int charHeight = 16;2 [/ P4 F7 }+ a! h& l# E  k
  16.         int color = 0x0000ff; //0x00BBGGRR
    + c7 I) Z1 t9 ^& J! D* J) ^& X4 k
  17.         const uint pitch = dstSurf->pitch;
    : [, q) x+ q6 f" \
  18.         const uint bytesPerPixel = dstSurf->format.bytesPerPixel;8 k; C( Y( Z0 e7 `8 Y7 J3 `
  19. - Q: P6 c' v5 A: @1 e
  20.         unsigned char *dst;
    $ f0 c) d. }3 C) `
  21.         const char *str = "中文测试";5 D* L0 |5 S# u$ Y6 H. l

  22. - n( I, V2 y: L% n; b; u0 @; d6 I
  23.         for (int i = 0; str[i] != '\0'; i = i+2) {
    + G% O2 c7 ?- O8 c
  24.                 int ch = (unsigned char)str[i];( z7 a. P. H& v' \1 f% E
  25.                 int ch2 = (unsigned char)str[i + 1];$ z& g5 h3 P) ~/ k% ]/ n+ h
  26.                 int idx = (ch - 0xa1) * 94 + (ch2 - 0xa1);
    1 `3 n3 `5 c$ c
  27.                 const unsigned char *fontData = hzk16_data + 32 * idx;* ]$ Z6 n( p/ o
  28.                 dst = (unsigned char *)dstSurf->getPixels() + y * pitch + (x + (i/2) * charWidth) * bytesPerPixel;
    % r& b+ B6 T! f/ T
  29. ' Y; f: t! r2 y0 q  C) S' I
  30.                 for (int row = 0; row < charHeight; ++row) {9 V' @: q- J: }: G
  31.                         for (int col = 0; col < charWidth; ++col) {
    & `8 T) S" }  _; A9 {  O; b
  32.                                 unsigned char pixelByte = fontData[row * 2 + col / 8];          // 每行对应2个字节
    & W' o) f/ K# \0 A: _$ z1 i
  33.                                 unsigned char pixelBit = (pixelByte >> (7 - (col % 8))) & 0x01; // 提取像素对应的位. _5 C2 A( J7 k" U7 \' L1 Q

  34. 0 V8 P- `& |/ x2 s7 \0 T
  35.                                 if (pixelBit == 1) {
    ; f  y8 u% ~7 y
  36.                                         // 设置像素颜色" z9 V8 P) g$ x3 |( l# Q2 i2 e. Q9 c2 ]
  37.                                         uint32 *pixel = (uint32 *)dst;! |9 h$ N- G) _7 }/ E
  38.                                         *pixel = color;
    1 w: c$ R: }. ^0 U
  39.                                 }$ o& L7 P7 g: |" ^0 x3 i4 t8 Z4 v
  40.                                 dst += bytesPerPixel;3 b5 [0 X/ Y* [( R1 T
  41.                         }9 J5 `5 m1 D# b& T8 V% p
  42.                         dst += pitch - charWidth * bytesPerPixel; // 跳到下一行的起始位置
    1 r6 s3 A1 T+ }7 |
  43.                 }% ?" h1 w  E( q3 b
  44.         }! P9 G8 f+ s! A+ E
  45. }
复制代码
2 Q8 ^% U0 z8 @) f2 W8 B  D/ G

/ u6 M5 B8 w) Y% s/ Y. P7 z

本帖子中包含更多资源

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

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

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