搜索附件  

TextBoard: d1.jpg

 

TextBoard:
练习结构体与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在线咨询功能删除,谢谢。
TextBoard: d1.jpg
关闭

幸运抽奖

社区每日抽奖来袭,快来试试你是欧皇还是非酋~

立即查看

Loading...

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

GMT+8, 2024-11-25 21:08 , Processed in 0.051132 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

返回顶部