设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1749|回复: 0
打印 上一主题 下一主题

[原创发布] TextBoard

[复制链接]

Lv4.逐梦者

梦石
0
星屑
6483
在线时间
119 小时
注册时间
2020-1-8
帖子
234
跳转到指定楼层
1
发表于 2022-5-12 19:55:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

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

x
本帖最后由 RPGzh500223 于 2022-5-12 20:00 编辑

练习结构体与intrinsics

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

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




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




temp.jpg (137 KB, 下载次数: 20)

temp.jpg

TextBoard.zip

5.66 KB, 下载次数: 8

TextBoard.dll

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-22 06:59

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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