查看: 59|回复: 0

[转载发布] TextBoard

[复制链接]
  • TA的每日心情
    开心
    2024-5-10 09:55
  • 签到天数: 37 天

    连续签到: 3 天

    [LV.5]常住居民I

    2028

    主题

    32

    回帖

    7260

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    0
    卡币
    5184
    OK点
    16
    积分
    7260
    发表于 同元一千年八月九日(秋) | 显示全部楼层 |阅读模式
    练习结构体与intrinsics

    使用GDI进行描绘文本,修复alpha通道,模拟Bitmap#blt进行颜色混合,HSL颜色渐变。
    多个字符情况下,虽然比Bitmap#draw_text快不少,但不考虑颜色混合效果的话,gdiplus都可以跑到3000+次/秒

    bug:写着玩,只处理了 4 * n 部分宽度的像素,尽量文本尾部远离 位图右边界。
    RUBY 代码
    1. module TextBoard
    2.   @@pBoard = 0
    3.   dll = "TextBoard.dll"
    4.   TB_open = Win32API.new(dll, 'TB_open', 'V', 'L')
    5.   TB_close = Win32API.new(dll, 'TB_close', 'L', 'L')
    6.   TB_select_bitmap = Win32API.new(dll, 'TB_select_bitmap', 'LL', 'L')
    7.   TB_set_font = Win32API.new(dll, 'TB_set_font', 'LLPLLLL', 'L')
    8.   TB_draw = Win32API.new(dll, 'TB_draw', 'LPLLLLL', 'L')
    9.   module_function
    10.   defopen
    11.     @@pBoard = TB_open.call()if @@pBoard == 0
    12.   end
    13.   def close
    14.     if @@pBoard != 0
    15.       TB_close.call(@@pBoard)
    16.       @@pBoard = 0
    17.     end
    18.   end
    19.   def select_bitmap(bitmap)
    20.     TB_select_bitmap.call(@@pBoard, bitmap)if @@pBoard != 0
    21.   end
    22.   # TB_open时字体默认设置下面的默认值,不改变字体参数的话可以不用调用此方法
    23.   # nWeight: 0..1000的整百数;700为粗体
    24.   def set_font(font_size = 22, font_name = "黑体", nWeight = 0,
    25.     bItalic = 0, bUnderline = 0, bStrikeOut = 0)
    26.     TB_set_font.call(@@pBoard, font_size, font_name, nWeight, bItalic,\
    27.       bUnderline, bStrikeOut)if @@pBoard != 0
    28.   end
    29.   # mode: 0 => 水平渐变;非0 => 垂直渐变
    30.   def draw(text, dx, dy, colorA, colorB = nil, mode = 0)
    31.     if @@pBoard != 0
    32.       TB_draw.call(@@pBoard, text, dx, dy, mode, colorA, colorB || colorA)
    33.     end
    34.   end
    35. end
    复制代码




    RUBY 代码
    1. # 简单的使用示例
    2. bitmap = Bitmap.new(640, 480)
    3. text = "文字描绘测试123-ABCD"
    4. font_size = 22
    5. font_name = "黑体"
    6. TextBoard.open
    7. TextBoard.select_bitmap(bitmap)
    8. TextBoard.set_font(font_size, font_name, 0)
    9. cA, cB = Color.new(255, 0, 0), Color.new(0, 255, 0)
    10. TextBoard.draw(text, 0, 100, cA, cB, 0)
    11. TextBoard.draw(text, 0, 200, cA, cB, 1)
    12. TextBoard.close
    复制代码






                 本帖来自P1论坛作者RPGzh500223,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=489677  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。

    本帖子中包含更多资源

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

    x
    天天去同能,天天有童年!
    回复 论坛版权

    使用道具 举报

    ahome_bigavatar:guest
    ahome_bigavatar:welcomelogin
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2024-5-21 04:25 , Processed in 0.049117 second(s), 42 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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