加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 SixRC 于 2019-10-28 17:14 编辑
更新情况在四楼 主楼不想改
不单纯blt矩形 根据mask位图的透明度blt 直接效果图吧 比较好理解
一共是两块内容
一块是 MaskBlt
一块是 BltMask
MaskBlt :
mask_blt(x,y,src,rect,mask,opc = 255)
就是多了一个 mask 这个参数可以直接是位图 也可以是等下的 BltMask 类型
这个mask的大小必须和Rect一致 或者更大 不然会炸的 一般反正就一样就行
根据这个mask各点的透明度来进行blt操作
还有一个mask_blt_reverse 参数是一样的 就是进行了 255 - 透明度的操作
这个函数 进行了多线程加持 而且基于之前我写的很多优化 效率很高
单线程情况耗时大概是原版blt的 13/11
现在一般都有多线程了 那效率就很好henhao了
BltMask :
这块基于 agg(anti grain geometry)
是对位图进行画图的类 就是画线 画多边形 圆等的 还有作一些简单坐标变换的
初始化
aa = BltMask.new(400, 400)
aa = BltMask.new(400, 400)
会新建相应大小的位图 并进行初始化
不需要时请 aa.dispose
这个类作图的逻辑是这样的
加入点 圆 弧线等 然后渲染 渲染会清空之前的点序列
我知道这样说不太好理解 我看agg的时候开始也很迷
比分画线
aa.move_to(0, 0) aa.line_to(100, 100) aa.draw_line
aa.move_to(0, 0)
aa.line_to(100, 100)
aa.draw_line
move_to 就是移到那里
line_to 就是画过去
draw_line 就是渲染
画个实心圆
aa.ellipse(200, 200, 100, 100) aa.draw_poly
aa.ellipse(200, 200, 100, 100)
aa.draw_poly
复合也行
aa.move_to(0, 0) aa.line_to(100, 100) aa.ellipse(200,200,100,100) aa.line_to(400,400) aa.draw_line
aa.move_to(0, 0)
aa.line_to(100, 100)
aa.ellipse(200,200,100,100)
aa.line_to(400,400)
aa.draw_line
画好了就能当mask_blt的参数 直接传 aa 进去就行
用完了记得 aa.clear 清空位图
下面是所有方法介绍
线相关 弧圆相关 渲染相关 坐标转换 其他 线段衔接柔化
如上
一般就是 设置好mask 然后mask_blt
示例没有 自己试着玩吧
下面代码
MaskBlt BltMask
插到随便什么地方
MaskBlt.zip
(236.58 KB, 下载次数: 67)
解压到文件目录
就这样 |