It returns black. All black. Hence the issue :-) The original file is an 8MP 4:3 image as png it saves to ~10mb. - as a Grayscale8 it saves as 8 KB-kilo. (should be 8,121,344) - as Indexed8 it saves as 5.5mb
I'd expect Greyscale8 to be about the same size on disk as Indexed8 +/- color table. > Sent: Friday, March 16, 2018 at 8:38 AM > From: "Nikolai Tasev" <niko...@nand.bg> > To: "Jason H" <jh...@gmx.com> > Cc: "Interestqt-project.org" <Interest@qt-project.org> > Subject: Re: [Interest] QImage::Format_Grayscale8 work working > > What is not working for Grayscale? Looking at the code it will do > different things when you are passing Qt::red, Qt::blue, Qt::green. > It will not return a color image but a grayscale image of the > corresponding channel. > > On 3/16/2018 2:08 PM, Jason H wrote: > >> Sent: Friday, March 16, 2018 at 9:12 AM > >> From: "Nikolai Tasev" <niko...@nand.bg> > >> To: "Jason H" <jh...@gmx.com>, "Interestqt-project.org" > >> <Interest@qt-project.org> > >> Subject: Re: [Interest] QImage::Format_Grayscale8 work working > >> > >> > >> Format_Indexed8 and Format_Grayscale8 both have 8bit per pixel. The > >> difference is that to convert from the 8bit pixel to RGB values > >> (QImage::pixel() method) > >> for Indexed8u you need to set the Palette for conversion and for > >> Grayscale8 you don't (it just assumes that R=G=B=gray value) > > I am aware of that. > > > >> Are you trying to extract a channel from a multichannel image and put it > >> into a grayscale image? The code seems unnecessary complex > >> and inefficient for such a task. You just need to get the data pointer > >> and skip the uneeded channels and keep watch for the end of the row. > > That assumes I be want to do the math for every Format. ARGB is easy, > > RGB888 is not, etc. Pixel() alerts need to not care. Yes, I could use scan > > lines, but then each format requires code. Which I haven't got time to > > write now. > > > > Anyway, I be still believe my code is correct, and it's still not working. > > > >> On 3/15/2018 10:21 PM, Jason H wrote: > >>> 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? > >>> _______________________________________________ > >>> Interest mailing list > >>> Interest@qt-project.org > >>> http://lists.qt-project.org/mailman/listinfo/interest > >>> > >> > > _______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest