我有一段可以使用的代码
my_surface = pygame.image.load('some_image.png')
Run Code Online (Sandbox Code Playgroud)
这将返回一个pygame表面.我想在其他地方使用相同的代码,而是传入一个numpy数组.(实际上,我将有一个if语句来确定我们是否有一个数组或一个图像的路径.在任何一种情况下,该函数必须返回相同类型的对象,一个pygame表面.它已经使用上面的工作了如果脚本的使用方式不同,我现在必须添加第二种生成相同对象的方法.)我尝试过使用
my_surface = pygame.pixelcopy.make_surface(my_array)
Run Code Online (Sandbox Code Playgroud)
但问题是这个函数需要一个INTEGER数组.我的数组是float32.我可以通过传递数组来强制它通过
(my_array*10000).astype(int)
Run Code Online (Sandbox Code Playgroud)
但是当我稍后显示它看起来像垃圾(想象我的惊喜).所以我的问题是,我们如何在一系列花车中优雅地创建一个pygame表面?
我正在使用tif堆栈,并且QImage似乎将某些图像倾斜到45度角。Matplotlib能够在两个测试用例中显示图像而没有问题(下面提供了两个tif堆栈的链接),所以我认为我没有在任何地方弄乱阵列。
这是一个工作示例:(注意:为简单起见,此示例仅显示tif堆栈中的第一个图像)
import matplotlib.pyplot as plt
import sys
from PIL import Image
from PyQt5.QtGui import QPixmap, QImage
from PyQt5.QtWidgets import (QMainWindow, QApplication, QVBoxLayout,
QWidget, QFileDialog, QGraphicsPixmapItem, QGraphicsView,
QGraphicsScene)
import numpy as np
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# set up a widget to hold a pixmap
wid = QWidget(self)
self.setCentralWidget(wid)
self.local_grview = QGraphicsView()
self.local_scene = QGraphicsScene()
vbox = QVBoxLayout()
self.local_grview.setScene( self.local_scene )
vbox.addWidget(self.local_grview)
wid.setLayout(vbox)
# load and display the image
self.loadImage()
# display the widget …Run Code Online (Sandbox Code Playgroud)