QImage 的效率
我们查看QImage 的代码中,可以发现很多函数中都会进行malloc 新创建一个对象,并且会进行深拷贝的操作 。
QImage 沟通的执行过程
QImage 2种构造,都会新new 一块内存来保存数据。
QImage(const QSize &size, Format format);
QImage(int width, int height, Format format);
QImage::QImage(const QSize &size, Format format)
: QPaintDevice()
{
d = QImageData::create(size, format);
}
QImageData * QImageData::create(const QSize &size, QImage::Format format)
{
if (!size.isValid() || format == QImage::Format_Invalid)
return nullptr; // invalid parameter(s)
int width = size.width();
int height = size.height();
int depth = qt_depthForFormat(format);
auto params = calculateImageParameters(width, height, depth); //计算btyes_per_line 和 total_bytes
if (!params.isValid())
return nullptr;
QScopedPointer<QImageData> d(new QImageData);