Qt - 在像素操作后显示无符号字符

Qt - displaying unsigned char after pixel manipulation

本文关键字:显示 无符号 字符 操作 像素 Qt      更新时间:2023-10-16

我正在尝试显示纵的像素(灰度像素),这些像素被表示为无符号的字符。

这是代码:

#include "mainwindow.h"
#include <QApplication>
#include "qimage.h"
#include <QImage>
#include <QLabel>
#include <QColor>
#include "qcolor.h"
#include <Qdebug>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    int height;
    int width;
    unsigned char *p, *p_begin;
    QImage img("C:\Users\Owner\Pictures\2013-09-26\IMG_0836.JPG");
    height = img.height();
    width = img.width();
    p = (unsigned char *)malloc(height * width * sizeof(unsigned char));
    p_begin = p;
    for (int row = 0; row < height; ++row)
    {
        for (int col = 0; col < width; ++col)
        {
            QColor clrCurrent( img.pixel( col, row ));
            *p = (unsigned char)((clrCurrent.green() * 0.587) + (clrCurrent.blue() * 0.114) + (clrCurrent.red() * 0.299));
            p++;
        }
    }
    p = p_begin;
    for ( int row = 0; row < height; ++row )
    {
        for (int col = 0; col < width; ++col)
        {
            QColor clrCurrent(img.pixel(col, row));
            clrCurrent.setBlue((int)(*p));
            clrCurrent.setGreen((int)(*p));
            clrCurrent.setRed((int)(*p));
            p++;
        }
    }
    QLabel myLabel;
    myLabel.setPixmap(QPixmap::fromImage(img));
    myLabel.show();
    return a.exec();
}

我真的不知道为什么,但所代表的图片是原始图片,而不是经过操纵的图片,应该是灰度的。我试图在网上找到没有运气,有什么想法吗?提前感谢。

这部分代码:

QColor clrCurrent(img.pixel(col, row));
clrCurrent.setBlue((int)(*p));
clrCurrent.setGreen((int)(*p));
clrCurrent.setRed((int)(*p));
p++;

不会更改图像。它只是将像素颜色带到临时对象,更改该对象,然后该对象就会被销毁而不会影响图像。

我建议大家查看一下QImage的功能scanLine。然后在一个地方的 for 循环中更改像素的颜色。这将更快地工作并改变图像。