我正在尝试使用 QPainter 将项目绘制到 QImage 上,但由于我无法预测此 QImage 的确切大小,所以我无法使用 QImage::save() ,它总是告诉我:
QPainter::begin: 绘图设备返回引擎 == 0,类型:3
但是如果我在声明此 QImage 时指定图像高度和宽度,则它可以顺利工作:
QImage 输出 = QImage (500, 500, QImage::Format_ARGB32);
最佳答案
QImage
、QPixmap
等需要在开始绘制之前分配数据。使用QImage
的默认构造函数不会分配任何内存,因此image.isNull() == true
。因此,当您调用 QPainter::begin()
(可能通过使用 QImage
创建一个作为绘画设备来间接调用)时,它无法绘制到任何内存中,因为它不是'在那里。
来自 QPainter::begin()
文档:
QPixmap image(0, 0);
painter->begin(&image); // impossible - image.isNull() == true;
所以在绘图之前你必须想出一个尺寸。在您的情况下,最好的办法是决定最大尺寸(或在可行的情况下计算一个),然后一旦您知道确切的尺寸 - 裁剪图像。
关于qt - 动态 QImage ,当没有指定初始大小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10930228/