Re: save Qimage in a file
Are you sure it is a png? Maybe the format guessing of your picture viewers is stronger.
Have a look into the file and see if the header really looks like png.
Try saving the file in your picture viewer as png and load that from your program. Can you load any other png file?
Joh
Re: save Qimage in a file
Does your image variable include the correct PNG header? It looks like youre trying to read in image values and possibly not including the header. If thats the case, it might be easier to manually parse the file and modify the pixel values, using QImage::setPixel or QImage::scanLine.
Re: save Qimage in a file
thanks guys for yours answers.
l checked the file, there is the png tag...and l actually opened it with Infranview and resaved it as PNG, then visually compared ( in wordpad) both files...they are the same format.
When l try to load the first png file with qimage.load(), it fails... but it is successful if l load the second file ( the one resave with infranview).
I'm just wondering if l should save the file with a specific format ( uint, string ..), maybe Infranview can detect the format while Qimage can not, it should be a specific format...
any idea about that ?
regards,
Michael
Re: save Qimage in a file
Quote:
l get the file as ASCII
This sounds problematic. Different machines have different ways of encoding text; most programs will attempt to correct for such differences by translating between them on the fly. For example, line endings are typically encoded as a single <LF> under Linux, while Windows uses <CR><LF>. So one thought is that there's some sort of ASCII translation that's hosing an otherwise good file. This would possibly explain why you can open it with another program, save it (in the local format) and it works.
Try handling your data as binary rather than text.
Re: save Qimage in a file
The original code tries to write an inherently binary format, through a QTextStream, to a file named "out.png" and expects it not to get mangled. This is broken is several ways.
You want to write using the QIODevice::write() or writeData() function and a QByteArray containing the original PNG data.
Edit: I re-read the original post and changed the post entirely :)
Re: save Qimage in a file
I thought that but disregarded it when I read "but l can open the saved image on the disk with Infrview and other picture viewer", so obviously the picture get saved unmangled.
Unless of course I read the original post completely wrong.
1 Attachment(s)
Re: save Qimage in a file
Fragile at best:
Code:
#include <QtGui>
#include <QDebug>
int main(int argc, char *argv[])
{
in.close();
QFile out
("tawny_out.png");
s << ba;
out.close();
}
}
return app.exec();
}
With this image in:
Attachment 6112
(I cannot upload the output file: the forum thinks it isn't valid)
It has produced a broken header in the output:
Code:
chrisw@newton /tmp/simple_example $ file *.png
tawny_out.png: data
tawny.png: PNG image data, 612 x 816, 8-bit/color RGB, non-interlaced
chrisw@newton /tmp/simple_example $ identify tawny*.png
tawny.png PNG 612x816 612x816+0+0 8-bit DirectClass 750KBB 0.000u 0:00.010
identify: improper image header `tawny_out.png' @ error/png.c/ReadPNGImage/2842.
The file is broken at the very first byte of the 8-byte header by UTF-8 encoding of that byte:
Code:
chrisw@newton /tmp/simple_example $ od -tx1 -tc -N 8 tawny.png
0000000 89 50 4e 47 0d 0a 1a 0a
211 P N G \r \n 032 \n
0000010
chrisw@newton /tmp/simple_example $ od -tx1 -tc -N 8 tawny_out.png
0000000 c2 89 50 4e 47 0d 0a 1a
302 211 P N G \r \n 032
0000010