You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派RGB LED矩阵比分板:解决OverflowError负数值转size_t报错

问题解决:OverflowError: can't convert negative value to size_t

这个报错的根源很明确:你用的RGB矩阵库底层基于C实现,SetImage的坐标参数要求是无符号整数(size_t类型),但你传递了负数,负数转无符号类型会直接触发溢出错误。

为什么封装后才出问题?

未封装时你的队徽坐标计算刚好没产生负数,封装run_code函数后,要么是变量作用域变化(比如矩阵宽度、队徽尺寸的变量没正确传递/初始化),要么是动态获取的队徽尺寸超过了矩阵宽度,导致居中计算时得到负数(比如执行(矩阵宽度 - 队徽宽度)//2时,队徽更宽就会得到负结果)。

具体修复步骤

  1. 定位队徽坐标计算代码
    找到调用matrix.SetImage绘制队徽的代码段,检查x/y坐标的计算逻辑,比如类似这样的代码:
logo_x = (matrix.width - logo_img.width) // 2
logo_y = 2
  1. 强制坐标非负
    给坐标添加边界检查,确保不会传入负数:
# 修正坐标,避免负数
logo_x = max(0, (matrix.width - logo_img.width) // 2)
logo_y = max(0, logo_y)
# 再调用SetImage
matrix.SetImage(logo_img, x=logo_x, y=logo_y)
  1. 排查变量初始化问题
    检查run_code函数里的初始化顺序:是不是在计算坐标前,matrix.width或者logo_img.width还没被正确赋值?比如有没有把全局变量改成局部变量后漏传参数?

  2. 可选:限制队徽尺寸
    如果队徽尺寸经常超过矩阵,直接裁剪队徽到矩阵能容纳的大小:

from PIL import Image
# 把队徽缩放到不超过矩阵宽度
max_logo_width = matrix.width
if logo_img.width > max_logo_width:
    scale_ratio = max_logo_width / logo_img.width
    new_height = int(logo_img.height * scale_ratio)
    logo_img = logo_img.resize((max_logo_width, new_height), Image.Resampling.LANCZOS)

验证

修改后重新运行run_code,如果比分和队徽都能正常显示,就说明问题解决了。

内容的提问来源于stack exchange,提问作者Kratos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 17:44:53