294 Star 1.6K Fork 387

GVP合宙Luat / LuatOS

 / 详情

关于zbuff:write的疑问

已完成
任务
创建于  
2021-12-21 10:24

固件版本

  • 固件名称:LuatOS-SoC_V0006_AIR101.soc
  • 使用设备:Air101开发板
  • 使用功能:使用zbuff绘图

描述一下这个问题

使用zbuff创建后用write填充像素进行绘图出错

复现步骤

local x,y=48,10
local w,h=64,64
local img=zbuff.create(w*h*2)
for i=1,w*h,2 do
    img:write(0xf8)
    img:write(0x00)
end    
lcd.draw(x,y,x+w-1,y+h-1,img)

预期的行为

绘制一个64*64的矩形

截图

输入图片说明

补充测试

如果将上述代码中的local w,h=64,64改为local w,h=64,48
即将矩形大小改为64*48可以成功运行并绘制图形。

评论 (5)

techhome 创建了任务
techhome 修改了描述
techhome 修改了描述
晨旭 修改了描述
展开全部操作日志

zbuff创建后需要检查一下是不是nil,如果是的话就说明内存不够申请

为什么下列代码可以成功执行,没有报错呢?

lcd.fill(0,0,160,80,0xffff)
--cls lcd to black
local w0,h0=160,80
lcd.draw(0,0,w0-1,h0-1,zbuff.create({w0,h0,16},0x0))

根据源码

https://gitee.com/openLuat/LuatOS/blob/master/components/lcd/luat_lib_lcd.c#L319-361

如果传入的第五个值是nil,那会直接返回0,没有任何效果

local w0,h0=160,80
lcd.draw(0,0,w0-1,h0-1,zbuff.create({w0,h0,16},0x1f00))
--draw image
local x,y=48,10
local w,h=64,48
local img=zbuff.create({w,h,16},0x0)
--需要判断img是否为nil,如果为nil,则表示创建失败(内存不够)如不能创建64*64大小。
for i=1,w*h,2 do
    img:write(0xf8)
    img:write(0x00)
end    
lcd.draw(x,y,x+w-1,y+h-1,img)

从执行效果来看,是产生了效果的。
输入图片说明

没有完整代码,无法看出你想证明什么

techhome 任务状态待办的 修改为已完成

登录 后才可以发表评论

状态
负责人
项目
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
预计工期 (小时)
参与者(2)
534181 chenxuuu 1578926871
Lua
1
https://gitee.com/openLuat/LuatOS.git
git@gitee.com:openLuat/LuatOS.git
openLuat
LuatOS
LuatOS

搜索帮助

344bd9b3 5694891 D2dac590 5694891