Qt - 像素操作后显示无符号字符
Qt - displaying unsigned char after pixel manipulation
我正在尝试显示我操纵的像素(对它们进行灰度缩放),但未成功显示为 unsigned char。
代码如下:
#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++;
不更改 img。
它只是对临时对象取像素颜色,改变那个对象,然后这个对象就被销毁而不影响图像。
我建议您查看 QImage 的功能 scanLine
。然后在一个地方的一个for循环中改变像素的颜色。这会工作得更快并且会改变图像。
我正在尝试显示我操纵的像素(对它们进行灰度缩放),但未成功显示为 unsigned char。
代码如下:
#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++;
不更改 img。 它只是对临时对象取像素颜色,改变那个对象,然后这个对象就被销毁而不影响图像。
我建议您查看 QImage 的功能 scanLine
。然后在一个地方的一个for循环中改变像素的颜色。这会工作得更快并且会改变图像。