PySide6 QImage转PyQtGraph可用ndarray失败问题求助
QImage像素格式不匹配:qimage2ndarray的
rgb_view、raw_view等方法对输入QImage的格式有严格要求。绘制文本后的QImage通常默认使用QImage.Format_ARGB32格式(带Alpha通道,小端系统下字节顺序为BGRA),而rgb_view默认按RGB顺序解析或忽略Alpha通道,直接转换会导致颜色错乱、画面异常。若未明确指定QImage为QImage.Format_RGB888或QImage.Format_RGBA8888这类兼容格式,方法无法正确解析通道顺序。内存对齐与布局差异:QImage为优化绘制性能,内存会按4字节对齐;而numpy数组的内存布局可能与QImage的扫描线对齐方式不兼容。
raw_view是直接映射QImage内存到numpy数组,若对齐方式不匹配,会导致数组读取时出现偏移,表现为画面错位、条纹或乱码。recarray_view的场景限制:
recarray_view仅支持将特定格式的QImage转换为结构化numpy数组(如每个元素对应(r,g,b)元组),仅兼容无Alpha通道的RGB类格式(如Format_RGB888)。如果你的QImage是带Alpha的格式,或格式不在其支持列表内,会直接抛出错误无法工作。绘制文本后的格式隐式转换:在QImage上绘制文本时,Qt会自动启用抗锯齿,这会将QImage隐式转换为支持半透明的格式(如ARGB32),即使你初始创建的是RGB格式。这种隐式转换会导致qimage2ndarray的方法接收到非预期格式,转换逻辑失效。
维度顺序不匹配PyQtGraph要求:PyQtGraph.ImageItem期望numpy数组的形状为
(height, width, channels),而qimage2ndarray的部分方法可能输出(width, height, channels)的数组,导致图像旋转、拉伸或显示异常。
内容的提问来源于stack exchange,提问作者Andrei M.

