如何使用 PPM 格式的 uchar* 数组填充 QPixmap
How fill QPixmap with uchar* array in PPM format
我以PPM格式(255 255 255(生成点颜色数组。如何在像素图中显示它?
如果我用蓝色(m_pixmap.fill(Qt::blue)
(程序填充pixmap,为我绘制一个蓝色方块,但是当我尝试加载PPM图像时,我得到没有任何图像的空白空间。
我以这种方式加载 ppm:
ImageViewer::ImageViewer(QWidget * pi_parent)
: QLabel{ QString{"ImageViewer" }, pi_parent }
, m_pixmap{ 3, 2}
{
m_pixmap.fill(Qt::blue);
unsigned char data[] = {
'P3',
'3', '2',
'255',
'255', '0', '0',
'0', '255', '0',
'0', '0', '255',
'255', '255', '0',
'255', '255', '255',
'0', '0', '0'
};
m_pixmap.loadFromData(data, sizeof(data), "PPM");
this->setScaledContents(true);
this->setPixmap(m_pixmap);
}
如何从颜色数组中设置 PPM 图像?(不从文件中读取(
首先,您必须了解PPM是某些图像的文本表示。现在您的data
设置不正确,这就是加载失败的原因(缺少空格或换行符会使此文本不可读(。
它可以像这样(使用 C++17std::string_view
(:
using namespace std::string_view_literals;
// this is a string view created from raw string literal
constexpr auto ppmImageData = R"(P3
3 2
255
255 0 0 0 255 0 0 0 255
255 255 0 255 255 255 0 0 0
)"sv;
ImageViewer::ImageViewer(QWidget * pi_parent)
: QLabel{ QString{"ImageViewer" }, pi_parent }
, m_pixmap{ 3, 2}
{
m_pixmap.loadFromData(ppmImageData.data(), ppmImageData.size(), "PPM");
this->setScaledContents(true);
this->setPixmap(m_pixmap);
}
删除std::string_view
(如果您没有 C++17(非常简单:只需删除sv
后缀并更正loadFromData
调用的参数即可。
相关文章:
- 在c++中用vector填充一个简单的动态数组
- 如何使用用户输入在C++中正确填充2D数组
- 如何找到大小'x'数组是否完全填充,在C++?
- 如何正确填充在堆上分配的二维数组?
- 如何将零填充的多维数组传递给 C++ 中的函数?
- C++ 填充数组时遇到问题
- 数组填充了不正确的值
- 使用初始化列表填充C++中的多维结构数组时出现问题
- 用数据填充未指定大小的数组
- C++填充多维标准::数组
- 如何在 c++ 上将一定大小的数组填充到另一个更大大小的数组中?
- 有没有办法使用数组填充向量?
- 如何使用 PPM 格式的 uchar* 数组填充 QPixmap
- 在C 中动态分配的数组填充
- 使用数组填充对称矩阵
- C++中的{0}数组填充赋值
- 如何在OpenCV中用OpenNi的deepPixel数组填充矩阵
- 按行、列或随机从数组填充矩阵时出现错误索引问题
- 如何加快非顺序数组填充
- 将数组填充到最大值(memcpy vs vector)