void writePNG(const QImage& image) { info_ptr->channels = 4; png_set_sig_bytes(png_ptr, 8); // Pretend we already wrote the sig png_set_IHDR(png_ptr, info_ptr, image.width(), image.height(), 8, image.hasAlphaBuffer() ? PNG_COLOR_TYPE_RGB_ALPHA : PNG_COLOR_TYPE_RGB, 0, 0, 0); png_write_info(png_ptr, info_ptr); if ( !image.hasAlphaBuffer() ) png_set_filler(png_ptr, 0, QImage::systemByteOrder() == QImage::BigEndian ? PNG_FILLER_BEFORE : PNG_FILLER_AFTER); //if ( QImage::systemByteOrder() == QImage::BigEndian ) { //png_set_swap_alpha(png_ptr); //} if ( QImage::systemByteOrder() == QImage::LittleEndian ) { png_set_bgr(png_ptr); } png_bytep* row_pointers; uint height = image.height(); uchar** jt = image.jumpTable(); row_pointers=new png_bytep[height]; uint y; for (y=0; y<height; y++) { row_pointers[y]=jt[y]; } png_write_image(png_ptr, row_pointers); delete [] row_pointers; png_write_end(png_ptr, info_ptr); end_png(); begin_png(); }
void writePNG(const QImage& image) { #ifndef QT_LSB // LSB disallows accessing the info_ptr directly. LSB's png_set_IHDR sets // the channels anyways, so just comment it out for LSB usage info_ptr->channels = 4; #endif png_set_sig_bytes(png_ptr, 8); // Pretend we already wrote the sig png_set_IHDR(png_ptr, info_ptr, image.width(), image.height(), 8, image.hasAlphaChannel() ? PNG_COLOR_TYPE_RGB_ALPHA : PNG_COLOR_TYPE_RGB, 0, 0, 0); png_write_info(png_ptr, info_ptr); if (!image.hasAlphaChannel()) png_set_filler(png_ptr, 0, QSysInfo::ByteOrder == QSysInfo::BigEndian ? PNG_FILLER_BEFORE : PNG_FILLER_AFTER); //if ( QImage::systemByteOrder() == QImage::BigEndian ) { //png_set_swap_alpha(png_ptr); //} if (QSysInfo::ByteOrder == QSysInfo::LittleEndian) { png_set_bgr(png_ptr); } int height = image.height(); png_bytep *row_pointers = new png_bytep[height]; for (int i = 0; i < height; ++i) row_pointers[i] = (png_bytep)image.scanLine(i); png_write_image(png_ptr, row_pointers); delete [] row_pointers; png_write_end(png_ptr, info_ptr); end_png(); begin_png(); }
QAnimationWriterMNG(QIODevice* d) : QAnimationWriterData(d) { first = TRUE; begin_png(); }