版權所有, 歡迎盜考
qt-everywhere-opensource-src-4.8.1/src/gui/image/qimage.cpp QImageData::doImageIO() qimagewriter.cpp QImageWriter::write() { if (!d->handler->write(image)) } handler is QPngHandler: createWriteHandlerHelper() { #ifndef QT_NO_IMAGEFORMAT_PNG } else if (testFormat == "png") { handler = new QPngHandler; #endif } qpnghandler.cpp bool QPngHandler::write(const QImage &image) { return write_png_image(image, device(), d->quality, d->gamma, d->description); } static bool write_png_image(const QImage &image, QIODevice *device, int quality, float gamma, const QString &description) { QPNGImageWriter writer(device); if (quality >= 0) { quality = qMin(quality, 100); quality = (100-quality) * 9 / 91; // map [0,100] -> [9,0] } writer.setGamma(gamma); return writer.writeImage(image, quality, description); } qpnghandler.cpp bool QPNGImageWriter::writeImage(const QImage& image, int off_x, int off_y) { return writeImage(image, -1, QString(), off_x, off_y); } bool Q_INTERNAL_WIN_NO_THROW QPNGImageWriter::writeImage(const QImage& image,
int quality_in, const QString &description, int off_x_in, int off_y_in) {
...
int height = image.height(); int width = image.width(); switch (image.format()) { case QImage::Format_Mono: case QImage::Format_MonoLSB: case QImage::Format_Indexed8: case QImage::Format_RGB32: case QImage::Format_ARGB32: case QImage::Format_RGB888: { png_bytep* row_pointers = new png_bytep[height]; for (int y=0; y<height; y++) row_pointers[y] = (png_bytep)image.constScanLine(y); png_write_image(png_ptr, row_pointers); delete [] row_pointers; } break; default: { QImage::Format fmt = image.hasAlphaChannel() ? QImage::Format_ARGB32 :
QImage::Format_RGB32; QImage row; png_bytep row_pointers[1]; for (int y=0; y<height; y++) { row = image.copy(0, y, width, 1).convertToFormat(fmt); row_pointers[0] = png_bytep(row.constScanLine(0)); png_write_rows(png_ptr, row_pointers, 1); } } break; }
}
使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。
沒有留言:
張貼留言
使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。
我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。