[Interest] QImage::Format_Grayscale8 work working

Jason H jhihn at gmx.com
Thu Mar 15 21:21:25 CET 2018


Given the following functions, I should be able to create a non-all black image (assuming input is good)? The only success I have is using Indexed8

QHash<QRgb, qint32 (*)(QRgb)> colorFuncs {
	{ Qt::red,   qRed},
	{ Qt::green, qGreen},
	{ Qt::blue,  qBlue},
	{ Qt::gray,  qGray},
};

QImage color8(const QImage &image, int channel) { // Channel is one of Qt::red Qt::green Qt::blue or Qt::gray
	QImage out(image.width(), image.height(), QImage::Format_Indexed8);  // Change to Format_Grayscale8, and get nothing
// for indexed8
	QVector<QRgb> values;
	values.reserve(256);
	if (channel==Qt::gray) { for (int c=0; c<256; c++) values.append(qRgb(c,c,c)); }
	if (channel==Qt::red)  { for (int c=0; c<256; c++) values.append(qRgb(c,0,0)); }
	if (channel==Qt::green){ for (int c=0; c<256; c++) values.append(qRgb(0,c,0)); }
	if (channel==Qt::blue) { for (int c=0; c<256; c++) values.append(qRgb(0,0,c)); }
	out.setColorTable(values);
// end for indexed8

	int (*colorFunc)(QRgb rgb) = colorFuncs[channel];
	for (int y=0; y < image.height(); y++) {
		for (int x=0; x < image.width(); x++) {
			out.setPixel(x,y, colorFunc(image.pixel(x,y)));
		}
	}

	return out;
}

I'm not familar with Qt and Grayscale8... Anyone know what is going wrong?



More information about the Interest mailing list