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

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

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

经过一番研究,找到了底层的贴图函数之后,加入了一个写中文字符串的函数,! O, `  d7 s+ |9 `( ]7 ~" |' c
目前已经可以往屏幕上写中文字符串了。7 N6 A2 R* i# h" f3 P2 N

' k6 u9 u, W% u# t0 X汉化抓图
7 ^; v) |8 }4 l3 [, |7 G5 b3 @! X, V7 [2 `
! `7 |! i- F7 w" Q+ }) `/ s
代码4 V1 c5 ^: S3 R  D9 W
backends\graphics\opengl\texture.cpp
  _2 {' v* A8 J0 _
  1. void Surface::copyRectToTexture(uint x, uint y, uint w, uint h, const void *srcPtr, uint srcPitch) {& b9 _& O) n- W! r4 n
  2.         copyRectToTextureOld(x, y, w , h , srcPtr, srcPitch);
    . N6 B8 l2 |! U7 d* w4 ?% W
  3.         //add by shane007
    $ c$ P- E2 o  I# Y2 s+ q
  4.         drawStringToSurface();
    . m6 y5 j. _9 _- p; h6 r1 o
  5. }
    $ m2 ?1 W& I: p' D
  6. 7 {; S) P, X& u, L
  7. //add by shane007* x, \, \" i, q4 f3 E) J
  8. void Surface::drawStringToSurface() {+ l, ?; k/ K7 F0 E0 u
  9. ) a2 D. _" _( \4 T6 k# i
  10.         Graphics::Surface *dstSurf = getSurface();) j  i( X! \4 m) s6 W9 O7 L
  11.         // 在Surface上显示字符串" x- O, L2 `2 i' W- v$ N
  12.         int x = 100;
    ; H8 C0 ?  x( H9 I( M% M
  13.         int y = 300;/ E- |- h5 g9 F7 }4 z( g; ^
  14.         int charWidth = 16;
    5 B; X% X- w3 W* [/ A  n3 ]8 @6 O; U
  15.         int charHeight = 16;
    + b: ]1 @, P4 N" }$ v% X7 K
  16.         int color = 0x0000ff; //0x00BBGGRR
    5 U! `* X- B# i8 |- i+ @1 h
  17.         const uint pitch = dstSurf->pitch;
    - g4 X) W# I- ?& n9 W
  18.         const uint bytesPerPixel = dstSurf->format.bytesPerPixel;! _" }* O# ]" ^
  19. ! c5 g$ T# ?0 C& R  S5 J
  20.         unsigned char *dst;
    ) ?6 i+ m; U) T4 b
  21.         const char *str = "中文测试";
    # \; u% L4 z/ I. g# `* q
  22. & n  i1 ]: [$ M1 V) d
  23.         for (int i = 0; str[i] != '\0'; i = i+2) {0 I6 a: D& W! O
  24.                 int ch = (unsigned char)str[i];" V% C: B2 B& w% u% Y9 K
  25.                 int ch2 = (unsigned char)str[i + 1];$ t" A1 s  E# C# X
  26.                 int idx = (ch - 0xa1) * 94 + (ch2 - 0xa1);
    ' x# l" R3 q8 ^
  27.                 const unsigned char *fontData = hzk16_data + 32 * idx;
    : i8 o; n( ^1 x8 v! Q& E. L
  28.                 dst = (unsigned char *)dstSurf->getPixels() + y * pitch + (x + (i/2) * charWidth) * bytesPerPixel;
    " {- r3 G/ [  V( u; s/ u

  29. 0 O. n+ h. j& F; u
  30.                 for (int row = 0; row < charHeight; ++row) {
    ! m, ^3 J0 z& X4 c. t
  31.                         for (int col = 0; col < charWidth; ++col) {
    ! d: M0 N& \: Z5 J% c/ \
  32.                                 unsigned char pixelByte = fontData[row * 2 + col / 8];          // 每行对应2个字节
    0 A; I2 p" y" d9 O
  33.                                 unsigned char pixelBit = (pixelByte >> (7 - (col % 8))) & 0x01; // 提取像素对应的位. q! x) \: N! H. f) g. n9 t
  34. 6 z) t' u) f+ N- d. g6 ^) r$ _" ]" m
  35.                                 if (pixelBit == 1) {% X# a, d7 t: a, p2 x
  36.                                         // 设置像素颜色
    $ [2 \; o; D" Z: ?1 x: `* m
  37.                                         uint32 *pixel = (uint32 *)dst;
    1 m* q: M4 k% q3 v
  38.                                         *pixel = color;) v. c5 ?; ?0 u) y, \3 O: I; |5 i
  39.                                 }# R: q. F4 M! |( B2 O0 T
  40.                                 dst += bytesPerPixel;
    * n  E) |4 a! t; Q+ S. _
  41.                         }
    3 z7 P! A' N: v& K
  42.                         dst += pitch - charWidth * bytesPerPixel; // 跳到下一行的起始位置
    . w3 b# E1 Y8 ?) _
  43.                 }1 A6 r. {# l' G% V& H
  44.         }
    / Q& A. L. E% z% ]( Q' S8 d5 [
  45. }
复制代码

; J, h$ Y  G: Y! F7 w/ b$ T
4 y  D4 c1 [; B  y" ]

本帖子中包含更多资源

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

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

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