gpt4 book ai didi

c++ - 如何用 PPM 格式的 uchar* 数组填充 QPixmap

转载 作者:行者123 更新时间:2023-11-28 04:11:26 33 4
gpt4 key购买 nike

我以 PPM 格式 (255 255 255) 生成点颜色数组。如何在像素图中显示它?

如果我用蓝色填充像素图 (m_pixmap.fill(Qt::blue)) 程序会为我绘制一个蓝色方 block ,但是当我尝试加载 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++17 std::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++ - 如何用 PPM 格式的 uchar* 数组填充 QPixmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57696630/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com