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

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

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

经过一番研究,找到了底层的贴图函数之后,加入了一个写中文字符串的函数,) ^4 ]5 S, _, k2 j, M: L' S
目前已经可以往屏幕上写中文字符串了。% @; L* e4 O; A' M8 K
; e9 E) C) R8 N. d& [# H' b* ]
汉化抓图0 E. q7 t- W0 j$ f# x

: L' `! G; Q! Q) S* B4 d4 Y. T2 u8 N, t. R9 N2 V- {( ]  q
代码
5 b, ^& X1 e" Z2 i! E7 L/ lbackends\graphics\opengl\texture.cpp
- S7 _3 A, {7 Q+ s
  1. void Surface::copyRectToTexture(uint x, uint y, uint w, uint h, const void *srcPtr, uint srcPitch) {9 H7 q0 i& ?- z/ N
  2.         copyRectToTextureOld(x, y, w , h , srcPtr, srcPitch);
    + z5 D/ z) |6 h+ Q2 [
  3.         //add by shane0072 N; ?2 Z+ x% k4 T+ C' h" N
  4.         drawStringToSurface();
    4 H# |! _  t! j+ n9 @
  5. }
    , ^, z6 |; n: w* k2 W" K$ s3 F
  6. ( s3 B% g  F% ]2 W, k7 O
  7. //add by shane007
    * p+ I# G+ k- y3 }- \) f8 V6 F
  8. void Surface::drawStringToSurface() {
    ! s9 c. B8 |* `4 }+ u/ {2 I
  9. ' C! d9 M3 {1 a# x* v! ^% Z
  10.         Graphics::Surface *dstSurf = getSurface();+ X- c2 o/ v% i: m7 R/ }
  11.         // 在Surface上显示字符串
    ; F9 L0 `2 E( b2 r! B
  12.         int x = 100;
    ( S) M3 E" A- p/ Q5 b
  13.         int y = 300;
    5 W( y3 }. {' R5 }6 R: _
  14.         int charWidth = 16;: T# D9 i% @2 u- t& G
  15.         int charHeight = 16;: ]. p! v! {2 E; l& |0 D% g# K
  16.         int color = 0x0000ff; //0x00BBGGRR5 a8 D! P7 w2 ~' a" W
  17.         const uint pitch = dstSurf->pitch;
    , @! i% {! }. [& v  W5 H+ f
  18.         const uint bytesPerPixel = dstSurf->format.bytesPerPixel;8 X4 E7 f) t+ l1 X# F8 r. \; n

  19. 2 {2 ~; p: h# U2 K  D
  20.         unsigned char *dst;" \* i/ G1 o6 A- V6 Z+ u
  21.         const char *str = "中文测试";
    , L" `6 k. ~$ x; i5 y6 }: a( q
  22. $ M$ m7 j2 l( u- e% h. w) H4 j
  23.         for (int i = 0; str[i] != '\0'; i = i+2) {
    , W  _5 q& _3 B6 R: V; `
  24.                 int ch = (unsigned char)str[i];. t, P/ A2 x/ R( _. G) s
  25.                 int ch2 = (unsigned char)str[i + 1];$ d1 q. j% \$ e' H5 Q0 D; ^( T" A
  26.                 int idx = (ch - 0xa1) * 94 + (ch2 - 0xa1);
    5 \( f: O# g8 i0 k1 U7 H
  27.                 const unsigned char *fontData = hzk16_data + 32 * idx;
    4 D5 j- Z: _: `+ Y2 @  m2 t
  28.                 dst = (unsigned char *)dstSurf->getPixels() + y * pitch + (x + (i/2) * charWidth) * bytesPerPixel;% D1 l0 Z( E5 Z5 ?1 ~  J+ ?: I

  29. ' j/ P# H# s, O8 j1 o8 ~
  30.                 for (int row = 0; row < charHeight; ++row) {
    ( q! }0 q' N- T# `. W  Z
  31.                         for (int col = 0; col < charWidth; ++col) {2 J) \$ N& j; D$ M
  32.                                 unsigned char pixelByte = fontData[row * 2 + col / 8];          // 每行对应2个字节6 L+ o* P) F5 f& o! A
  33.                                 unsigned char pixelBit = (pixelByte >> (7 - (col % 8))) & 0x01; // 提取像素对应的位
    / y& ^  u4 \" N) j# ^

  34. + Y& J5 h. h  c& e$ \! f
  35.                                 if (pixelBit == 1) {. s' H, A! G* R  @& P1 F
  36.                                         // 设置像素颜色
    & T, A3 E" _- K' j
  37.                                         uint32 *pixel = (uint32 *)dst;) H, \3 H. ~) f+ S
  38.                                         *pixel = color;
    % T( n' r" x  z0 U$ I7 h9 K% X+ o; \
  39.                                 }% s3 l2 `6 r. m6 m: O
  40.                                 dst += bytesPerPixel;, a+ O; b! N" L6 J! {3 T9 j
  41.                         }, d3 X/ S4 }5 N9 d( ]9 E
  42.                         dst += pitch - charWidth * bytesPerPixel; // 跳到下一行的起始位置; o( t/ F9 w$ o
  43.                 }4 Z0 [% s! `" Z' n
  44.         }; m; z( B$ A# k
  45. }
复制代码
/ H) P& p9 _* U0 k' z$ W
9 K  G( p* B7 t% p: ~. _+ w# @+ u

本帖子中包含更多资源

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

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

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