使用PyQT在Python中将二维整数数组重写为位图
我想用PyQt把一组整数转换成某种“图片”(我决定用Qt来做我的应用)。我有这样的数组:
Array = [
[0,0,1,0,0],
[0,1,0,1,0],
[1,0,0,0,1],
[0,1,0,1,0],
[0,0,1,0,0]]
现在我想把它转换成图片,把每个整数替换成比如说10x10像素的方块。我已经为数组中的每个值定义了RGB颜色。此外,这个项目是某种生命游戏,所以它必须在每一步都刷新,而且不能太慢。也许可以用类似OpenCV的东西?
提前谢谢你!
祝好,
Mateusz
2 个回答
你可以很简单地使用 QGraphicsScene 和 QGraphicsView 来实现上面的功能。为了获得更好的性能,你需要在你的 QGraphicsView
实例上调用 setViewport(QGLWidget())。你可以创建一个 QGraphicsItem 的子类来表示你数组中的一个元素。这样的话,如果你想的话,还可以对这些变化进行动画处理。
如果你想要动画效果,或者在演示一些进程,比如康威的生命游戏,你可能还想看看 QTimeLine。
你可以在 PyQt* 或者 PySide 网站上查找相应的 Python 文档。PyQt 和 PySide 的 API 几乎是一样的,所以大多数情况下你可以互换使用它们。
*注意:在写这段话的时候,PyQt 网站无法访问
你可能应该使用QT的图形库来提高性能。还有一种可能更简单的方法,就是使用PIL(Python图像库)或者一些与ImageMagick或MagickWand库相关的Python绑定(我还没找到一个好的、最新的)。然后可以用NumPy的数组来进行计算和处理,再通过PyGame、QT或其他图形用户界面工具包在一个表面或画布上绘图。
在PIL中,有一个叫PIL.Image.fromarray(np_array, 'RGBA')
的功能,它可以读取合适的NumPy数组——数据类型通常需要是dtype=int8
,形状是(高度, 宽度, 通道数)
。
如果你想了解一种非常简单的图形格式,使用的是ascii字节值,可以看看NetPBM。