从缓冲区构建 QImage
Build a QImage from a buffer
例如,如何从缓冲区构建 QImage?
在这种情况下,我使用 3x3 的缓冲区,其值从 0(黑色)到 255(白色)。
0 255 0
255 0 255
0 255 0
并且存储在 unsigned char buffer[9] = {0, 255, 0, 255, 0, 255, 0, 255, 0};
目前我正在尝试这个但不起作用:
QImage image{buffer, 3, 3, QImage::Format_Grayscale8};
您正在使用的构造函数...
QImage(uchar *data, int width, int height, QImage::Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr)
有警告...
data must be 32-bit aligned, and each scanline of data in the image
must also be 32-bit aligned
因此,QImage
实现期望每条扫描线中的字节数是 4 的倍数——您的数据缓冲区不满足这一条件。而是使用 constructor 允许您明确指定每条扫描线的字节数...
QImage(uchar *data, int width, int height, int bytesPerLine, QImage::Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr)
所以你的代码变成了...
unsigned char buffer[9] = {0, 255, 0, 255, 0, 255, 0, 255, 0};
QImage image{buffer, 3, 3, 3, QImage::Format_Grayscale8};
例如,如何从缓冲区构建 QImage?
在这种情况下,我使用 3x3 的缓冲区,其值从 0(黑色)到 255(白色)。
0 255 0
255 0 255
0 255 0
并且存储在 unsigned char buffer[9] = {0, 255, 0, 255, 0, 255, 0, 255, 0};
目前我正在尝试这个但不起作用:
QImage image{buffer, 3, 3, QImage::Format_Grayscale8};
您正在使用的构造函数...
QImage(uchar *data, int width, int height, QImage::Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr)
有警告...
data must be 32-bit aligned, and each scanline of data in the image must also be 32-bit aligned
因此,QImage
实现期望每条扫描线中的字节数是 4 的倍数——您的数据缓冲区不满足这一条件。而是使用 constructor 允许您明确指定每条扫描线的字节数...
QImage(uchar *data, int width, int height, int bytesPerLine, QImage::Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr)
所以你的代码变成了...
unsigned char buffer[9] = {0, 255, 0, 255, 0, 255, 0, 255, 0};
QImage image{buffer, 3, 3, 3, QImage::Format_Grayscale8};