Пример #1
0
void MainWindow::loadImage() {

    QImageReader reader;
    reader.setFileName(QFileDialog::getOpenFileName(this,tr("Open image"),"C:\\Users\\GiBSoN\\Desktop",tr("Image files (*.jpg *.png)")));
    QImage image = reader.read();
    imageSize = image.size();

    QVector<double> params;
    QVector<KPoint> points;

    for(int i=0;i<image.width();i++) {
        for(int j=0;j<image.height();j++) {
            params.push_back(qRed(image.pixel(i,j)));
            params.push_back(qGreen(image.pixel(i,j)));
            params.push_back(qBlue(image.pixel(i,j)));
            points.push_back(params);
            params.clear();
        }
    }

    nGas.setInputData(points);

    ui->actionNeural_Gas_Image->setEnabled(true);

    ui->graphicsView->setVisible(true);
    ui->graphicsView_2->setVisible(true);

    QGraphicsScene* scene = new QGraphicsScene(this);
    ui->graphicsView->setScene(scene);
    scene->addPixmap(QPixmap::fromImage(image.scaled(ui->graphicsView->width()*0.95,ui->graphicsView->height()*0.95)));
    ui->graphicsView->show();

    qDebug() << "Pixels: " << points.size() << " Dimensions: " << points[0].getDimensions();
}
Пример #2
0
void LoadFilter::detectFormat()
{
    // FIXME: work-around bug 242369
    if (priv->fileFormatQt.isEmpty() &&
        priv->fileFormat.isEmpty() &&
        priv->fileName.endsWith(".mp4")) {
        if (priv->filterError == QuillImageFilter::NoError)
            priv->filterError = QuillImageFilter::UnsupportedFormatError;
        priv->isInvalid = true;
        priv->fileFormat = "video/mp4";
        return;
    }

    if (priv->fileFormatQt.isEmpty() &&
        (priv->fileFormat.isEmpty() || priv->fileFormat.startsWith("image/"))) {
        QImageReader reader;
        if (!priv->iODevice)
            reader.setFileName(priv->fileName);
        else
            reader.setDevice(priv->iODevice);

        priv->fileFormatQt = formatFromReader(&reader);
    }

    if (priv->fileFormat.isEmpty()) {
        priv->fileFormat = MimeType::fromQImageFormat(priv->fileFormatQt);
    }

    if (priv->fileFormatQt.isEmpty()) {
        if (priv->filterError == QuillImageFilter::NoError)
            priv->filterError = QuillImageFilter::UnsupportedFormatError;
        priv->isInvalid = true;
    }
}
Пример #3
0
bool syImgReaderCodec::OpenInput(const syString filename) {
    bool result = false;
    syString newfilename = filename;
    if(m_Filename != "" && filename.empty()) {
        newfilename = m_Filename;
    } else {
        newfilename = filename;
    }
    if(m_Reader && syString(m_Reader->fileName()) != newfilename) {
        CloseInput();
        if(m_Reader) {
            m_Reader->setFileName(newfilename);
            m_Filename = filename;
        }
    }
    if(!m_Reader) {
        m_Reader = new QImageReader(newfilename);
        m_Filename = newfilename;
    }
    result = m_Reader->canRead();
    if(result) {
        if(m_Image) {
            delete m_Image;
        }
        m_Image = new QImage(GetWidth(),GetHeight(),QImage::Format_RGB32);
    }
    return result;
}
Пример #4
0
VideoReviewDialog::VideoReviewDialog(QWidget* parent, const QString& imgdir)
 : QDialog(parent)
{
	setWindowTitle("Video review for Hotbuild2");

	QImageReader *reader = new QImageReader(imgdir + "img_start_bground_sample.jpg");
	QImage bground = reader->read();
	delete reader;

	QPalette* palette = new QPalette();
	palette->setBrush(QPalette::Background, *(new QBrush(bground)));
	setPalette(*palette);

	QVBoxLayout *layout = new QVBoxLayout(this);

	QWebView *webview = new QWebView(this);
	webview->setGeometry(0, 0, 640, 480);
	webview->resize(640, 480);
	QWebSettings::globalSettings()->setAttribute(QWebSettings::PluginsEnabled, true);
	webview->settings()->setAttribute(QWebSettings::PluginsEnabled, true);
	webview->load(QUrl("http://www.youtube.com/embed/NNXV01cttMY?html5=1"));
	webview->show();

	QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok, Qt::Horizontal, this);
//	connect(buttonBox, SIGNAL(accepted()), SLOT(accept()));
	
	layout->addWidget(webview);
	layout->addWidget(buttonBox);
}
Пример #5
0
void PictureLoader::picDownloadFinished(QNetworkReply *reply)
{
    if (reply->error()) {
        qDebug() << "Download failed:" << reply->errorString();
    }

    int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
    if (statusCode == 301 || statusCode == 302) {
        QUrl redirectUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
        QNetworkRequest req(redirectUrl);
        qDebug() << "following redirect:" << cardBeingDownloaded.getCard()->getName() << "Url:" << req.url();
        networkManager->get(req);
        return;
    }

    const QByteArray &picData = reply->peek(reply->size()); //peek is used to keep the data in the buffer for use by QImageReader

    if(imageIsBlackListed(picData))
    {
        qDebug() << "Picture downloaded, but blacklisted, will consider it as not found";
        picDownloadFailed();
        reply->deleteLater();
        startNextPicDownload();
        return;
    }

    QImage testImage;
    
    QImageReader imgReader;
    imgReader.setDecideFormatFromContent(true);
    imgReader.setDevice(reply);
    QString extension = "." + imgReader.format(); //the format is determined prior to reading the QImageReader data into a QImage object, as that wipes the QImageReader buffer
    if (extension == ".jpeg")
        extension = ".jpg";
    
    if (imgReader.read(&testImage)) {
        QString setName = cardBeingDownloaded.getSetName();
        if(!setName.isEmpty())
        {
            if (!QDir().mkpath(picsPath + "/downloadedPics/" + setName)) {
                qDebug() << picsPath + "/downloadedPics/" + setName + " could not be created.";
                return;
            }

            QFile newPic(picsPath + "/downloadedPics/" + setName + "/" + cardBeingDownloaded.getCard()->getCorrectedName() + extension);
            if (!newPic.open(QIODevice::WriteOnly))
                return;
            newPic.write(picData);
            newPic.close();
        }

        imageLoaded(cardBeingDownloaded.getCard(), testImage);
    } else {
        picDownloadFailed();
    } 

    reply->deleteLater();
    startNextPicDownload();
}
Пример #6
0
void PictureLoader::picDownloadFinished(QNetworkReply *reply)
{
    QString picsPath = _picsPath;
    if (reply->error()) {
        qDebug() << "Download failed:" << reply->errorString();
    }

    const QByteArray &picData = reply->peek(reply->size()); //peek is used to keep the data in the buffer for use by QImageReader
    QImage testImage;

    QImageReader imgReader;
    imgReader.setDecideFormatFromContent(true);
    imgReader.setDevice(reply);
    QString extension = "." + imgReader.format(); //the format is determined prior to reading the QImageReader data into a QImage object, as that wipes the QImageReader buffer
    if (extension == ".jpeg")
        extension = ".jpg";

    if (imgReader.read(&testImage)) {
        QString setName = cardBeingDownloaded.getSetName();
        if(!setName.isEmpty())
        {
            if (!QDir().mkpath(picsPath + "/downloadedPics/" + setName)) {
                qDebug() << picsPath + "/downloadedPics/" + setName + " could not be created.";
                return;
            }

            QFile newPic(picsPath + "/downloadedPics/" + setName + "/" + cardBeingDownloaded.getCard()->getCorrectedName() + extension);
            if (!newPic.open(QIODevice::WriteOnly))
                return;
            newPic.write(picData);
            newPic.close();
        }

        emit imageLoaded(cardBeingDownloaded.getCard(), testImage);
    } else if (cardBeingDownloaded.getHq()) {
        qDebug() << "HQ: received invalid picture. URL:" << reply->request().url();
        cardBeingDownloaded.setHq(false);
        cardsToDownload.prepend(cardBeingDownloaded);
    } else {
        qDebug() << "LQ: received invalid picture. URL:" << reply->request().url();
        if (cardBeingDownloaded.nextSet()) {
            cardBeingDownloaded.setHq(true);
            mutex.lock();
            loadQueue.prepend(cardBeingDownloaded);
            mutex.unlock();
            emit startLoadQueue();
        } else
            emit imageLoaded(cardBeingDownloaded.getCard(), QImage());
    }

    reply->deleteLater();
    startNextPicDownload();
}
Пример #7
0
bool ImageStripScene::setCurrentDirectory(const QString& path)
{
    QMutexLocker locker(&m_mutex);
    QDir         directory(path);
    QImageReader reader;
    
    if(directory.exists()) {
        clear();
        
        if(m_loader) {
            m_loader->disconnect(this);
            m_loader->stopExecution();
            
            if(!m_loader->wait(500)) {
                m_loader->terminate();
                m_loader->wait();
            }
        }
        
        delete m_loader;
        
        m_numItems = 0;
        m_loader   = new ImageLoader(m_imgSize);
        connect(m_loader, SIGNAL(sigItemContentChanged(ImageItem*)), SLOT(slotItemContentChanged(ImageItem*)));
        
        QStringList            files  = directory.entryList(QDir::Files);
        QGraphicsLinearLayout* layout = new QGraphicsLinearLayout();
        
        for(QStringList::iterator name=files.begin(); name!=files.end(); ++name) {
            QString path = directory.absoluteFilePath(*name);
            reader.setFileName(path);
            
            if(reader.canRead()) {
                ImageItem* item = new ImageItem(m_imgSize, path, m_loader);
                m_loader->addPath(item, path);
                layout->addItem(item);
                ++m_numItems;
            }
        }
        
        QGraphicsWidget* widget = new QGraphicsWidget();
        widget->setLayout(layout);
        widget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
        
        addItem(widget);
        setSceneRect(widget->boundingRect());
        
        m_loader->start(QThread::LowPriority);
        return true;
    }
    
    return false;
}
Пример #8
0
Frame::Frame ( const Epyx::byte_str& data, const Frame::ptime& timestamp,
	       const ptime& rt):
    timestamp(timestamp),
    realTime(rt)
{
    QByteArray message = QByteArray(
                             reinterpret_cast<const char * > ( data.data() ),
                             data.size());
    QBuffer buffer ( &message );
    QImageReader in ( &buffer, "JPG" );
    image = in.read().copy();
}
Пример #9
0
gboolean
media_art_file_to_jpeg (const gchar  *filename,
                        const gchar  *target,
                        GError      **error)
{
	if (max_width_in_bytes < 0) {
		g_debug ("Not saving album art from file, disabled in config");
		return TRUE;
	}

	/* TODO: Add resizing support */
	/* TODO: Add error reporting */

	QFile file (filename);

	if (!file.open (QIODevice::ReadOnly)) {
		g_message ("Could not get QFile from file: '%s'", filename);
		return FALSE;
	}

	QByteArray array = file.readAll ();
	QBuffer buffer (&array);

	buffer.open (QIODevice::ReadOnly);

	QImageReader reader (&buffer);

	if (!reader.canRead ()) {
		g_message ("Could not get QImageReader from file: '%s', reader.canRead was FALSE",
		           filename);
		return FALSE;
	}

	QImage image1;
	image1 = reader.read ();

	if (image1.hasAlphaChannel ()) {
		QImage image2 (image1.size(), QImage::Format_RGB32);
		image2.fill (QColor(Qt::black).rgb());
		QPainter painter (&image2);
		painter.drawImage (0, 0, image1);
		image2.save (QString (target), "jpeg");
	} else {
		image1.save (QString (target), "jpeg");
	}

	return TRUE;
}
Пример #10
0
void syImgReaderCodec::CloseInput() {
    if(m_Reader) {
        m_Reader->setDevice(0);
        m_Filename.clear();
        m_ImageLoaded = false;
    }
}
Пример #11
0
void syImgReaderCodec::LoadCurrentFrame(syBitmap* dest) {
    if(!dest) {
        return;
    }
    sySafeMutexLocker lock(m_Mutex);
    if(lock.IsLocked()) {
        // 1. Check if m_Image is null. If not, abort (can't create the image, we could be in a worker thread)
        if(!m_Image) {
            return;
        }

        // 2. Read the image into m_Image.
        if(!m_ImageLoaded && m_Reader->read(m_Image)) {
            m_ImageLoaded = true;
        }

        // 3. Copy the image to dest.
        if(m_ImageLoaded) {
            const unsigned char* bits = m_Image->bits();
            dest->CopyFrom(bits,GetWidth(),GetHeight(),vcfRGB32,m_Image->numBytes());
        } else {
            dest->Clear();
        }
    }
}
Пример #12
0
bool syImgReaderCodec::OpenMemoryInput(const unsigned char* buf, unsigned int size, const char* mimetype) {
    bool result = false;
    syString fileformat;
    syString smimetype(mimetype, true);
    if(smimetype == "image/gif") {
        fileformat = "gif";
    }
    if(smimetype == "image/png") {
        fileformat = "png";
    } else if(smimetype == "image/jpeg") {
        fileformat = "jpg";
    } else if(smimetype == "image/bmp") {
        fileformat = "bmp";
    } else {
        return false; // Unrecognized file format!
    }

    if(!m_Buffer) {
        m_Buffer = new QBuffer;
    }
    m_Buffer->setData((const char*)buf,size);
    if(!m_Reader) {
        m_Reader = new QImageReader();
    }
    m_Reader->setDevice(m_Buffer);
    result = m_Reader->canRead();
    if(result) {
        syString actual_format(QString(m_Reader->format()));
        if(actual_format != fileformat) {
            result = false;
        }
        if(m_Image) {
            delete m_Image;
        }
        m_Image = new QImage(GetWidth(),GetHeight(),QImage::Format_RGB32);
    }
    if(!result) {
        m_Reader->setDevice(0);
        delete m_Reader;
        m_Reader = 0;
        delete m_Buffer;
        m_Buffer = 0;
        m_Filename.clear();
    }
    return result;
}
Пример #13
0
void Xmpp::vCardReceived (const QXmppVCardIq& vCard)
{
    QByteArray photo = vCard.photo();
    QBuffer buffer;
    buffer.setData (photo);
    buffer.open (QIODevice::ReadOnly);
    QImageReader imageReader (&buffer);
    QImage image = imageReader.read();

    if (image.isNull())
        image = QImage (":/faces/faces/generic-user.png");

    jids.append (vCard.from());
    users.append (vCard.fullName());

    emit newUser (vCard.fullName(), vCard.from(), image);
}
Пример #14
0
QPixmap Utils::renderSVG(const QString &path, const QSize &size)
{
    QImageReader reader;
    QPixmap pixmap;
    reader.setFileName(path);

    if (reader.canRead()) {
        const qreal ratio = qApp->devicePixelRatio();
        reader.setScaledSize(size * ratio);
        pixmap = QPixmap::fromImage(reader.read());
        pixmap.setDevicePixelRatio(ratio);
    } else {
        pixmap.load(path);
    }

    return pixmap;
}
Пример #15
0
void MainWindow_M::openFile()
{
	QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),"./",tr("Images (*.png)"));
	if(fileName.isEmpty())
		return;
	QFile file(fileName);
	file.read(QIODevice::ReadOnly);
	QImageReader imageReader;
	imageReader.setDevice(&file);
	renderarea->setCurrentCanvas(imageReader.read());
	renderarea->setContentChanged(false);

	statusBar()->showMessage(fileName.section('/', -1));
	clearTempFiles();

	strCurrentFileName = fileName;
}
Пример #16
0
bool readImageWithPrescale(QImageReader& reader, QImage& image, double& prescaleFactor)
{
    // used to scale the file before it is actually read to memory
    prescaleFactor = 1.0;

    int height = reader.size().height();
    if(height > HALF_DECIMATION_THRESHOLD_H)
        prescaleFactor = 0.5;
    else if(height > QUARTER_DECIMATION_THRESHOLD_H)
        prescaleFactor = 0.25;
    else if(height > EIGHTH_DECIMATION_THRESHOLD_H)
        prescaleFactor = 0.125;

    if(prescaleFactor != 1.0)
        reader.setScaledSize(QSize(reader.size().width() * prescaleFactor, reader.size().height() * prescaleFactor));

    return reader.read(&image);
}
Пример #17
0
unsigned long syImgReaderCodec::GetWidth() {
    if(!m_Reader) {
        return 0;
    }
    int width = m_Reader->size().width();
    if(width < 0) {
        return 0;
    }
    return width;
}
Пример #18
0
unsigned long syImgReaderCodec::GetHeight() {
    if(!m_Reader) {
        return 0;
    }
    int height = m_Reader->size().height();
    if(height < 0) {
        return 0;
    }
    return height;
}
Пример #19
0
void Document::pages( QVector<Okular::Page*> * pagesVector )
{
    qSort( mEntries.begin(), mEntries.end(), caseSensitiveNaturalOrderLessThen );
    QScopedPointer< QIODevice > dev;

    int count = 0;
    pagesVector->clear();
    pagesVector->resize( mEntries.size() );
    QImageReader reader;
    foreach(const QString &file, mEntries) {
        if ( mArchive ) {
            const KArchiveFile *entry = static_cast<const KArchiveFile*>( mArchiveDir->entry( file ) );
            if ( entry ) {
                dev.reset( entry->createDevice() );
            }
        } else if ( mDirectory ) {
            dev.reset( mDirectory->createDevice( file ) );
        } else {
            dev.reset( mUnrar->createDevice( file ) );
        }

        if ( ! dev.isNull() ) {
            reader.setDevice( dev.data() );
            if ( reader.canRead() )
            {
                QSize pageSize = reader.size();
                if ( !pageSize.isValid() ) {
                    const QImage i = reader.read();
                    if ( !i.isNull() )
                        pageSize = i.size();
                }
                if ( pageSize.isValid() ) {
                    pagesVector->replace( count, new Okular::Page( count, pageSize.width(), pageSize.height(), Okular::Rotation0 ) );
                    mPageMap.append(file);
                    count++;
                } else {
                    qCDebug(OkularComicbookDebug) << "Ignoring" << file << "doesn't seem to be an image even if QImageReader::canRead returned true";
                }
            }
        }
    }
    pagesVector->resize( count );
}
Пример #20
0
/*
 * DirFilesFilter
 * QFileSystemModel의 버그(캐시?) 인지 setNameFilter를 해도 계속해서 디렉토리나 파일이 보임
 * 그래서 디렉토리를 조회하여 직접 리스트를 만듬
 */
void MainWindow::DirFilesFilter(QString path) {
    qDebug() << "directoryLoaded";

    QModelIndex fileIdx = files_->index(path);
    int numRows = files_->rowCount(fileIdx);


    QImageReader imgReader;
    for (int index=0; index<numRows; index++) {
        QModelIndex mi = files_->index(index, 0, fileIdx);
        QFileInfo fileInfo = files_->fileInfo(mi);
        imgReader.setFileName(fileInfo.absoluteFilePath());
        if(imgReader.canRead())
            extfilter_imgs_ << fileInfo;
    }


    //extfilter_imgs 파일들을 모델로 만든다.
    FilesModelUpdate();

}
Пример #21
0
void DlgEditAvatar::actBrowse()
{
    QString fileName = QFileDialog::getOpenFileName(this, tr("Open Image"), QDir::homePath(), tr("Image Files (*.png *.jpg *.bmp)"));
    if(fileName.isEmpty())
    {
        imageLabel->setText(tr("No image chosen."));
        return;
    }

    QImage image;
    QImageReader imgReader;
    imgReader.setDecideFormatFromContent(true);
    imgReader.setFileName(fileName);
    if(!imgReader.read(&image))
    {
        qDebug() << "Avatar image loading failed for file:" << fileName;
        imageLabel->setText(tr("Invalid image chosen."));
        return;
    }
    imageLabel->setPixmap(QPixmap::fromImage(image).scaled(400, 200, Qt::KeepAspectRatio, Qt::SmoothTransformation));
}
Пример #22
0
bool PictureLoader::cardImageExistsOnDisk(QString & setName, QString & correctedCardname)
{
    QImage image;
    QImageReader imgReader;
    imgReader.setDecideFormatFromContent(true);

    //The list of paths to the folders in which to search for images
    QList<QString> picsPaths = QList<QString>() << picsPath + "/CUSTOM/" + correctedCardname;

    if(!setName.isEmpty())
    {
        picsPaths   << picsPath + "/" + setName + "/" + correctedCardname
                    << picsPath + "/downloadedPics/" + setName + "/" + correctedCardname;
    }

    //Iterates through the list of paths, searching for images with the desired name with any QImageReader-supported extension
    for (int i = 0; i < picsPaths.length(); i ++) {
        imgReader.setFileName(picsPaths.at(i));
        if (imgReader.read(&image)) {
            qDebug() << "Picture found on disk (set: " << setName << " card: " << correctedCardname << ")";
            imageLoaded(cardBeingLoaded.getCard(), image);
            return true;
        }
        imgReader.setFileName(picsPaths.at(i) + ".full");
        if (imgReader.read(&image)) {
            qDebug() << "Picture.full found on disk (set: " << setName << " card: " << correctedCardname << ")";
            imageLoaded(cardBeingLoaded.getCard(), image);
            return true;
        }
    }

    return false;
}
Пример #23
0
void KisImageLoader::run()
{
    typedef QHash<KisImageItem*,Data>::iterator Iterator;
    
    QImageReader reader;
    
    for(Iterator data=m_data.begin(); data!=m_data.end() && m_run; ++data) {
        reader.setFileName(data->path);
        qreal w = m_size;
        qreal h = m_size;
        
        if(reader.supportsOption(QImageIOHandler::Size)) {
            QSizeF imgSize = reader.size();
            
            if(imgSize.width() > imgSize.height()) {
                qreal div = m_size / imgSize.width();
                h = imgSize.height() * div;
            }
            else {
                qreal div = m_size / imgSize.height();
                w = imgSize.width() * div;
            }
        }
        
        reader.setScaledSize(QSize(w,h));
        data->image    = reader.read();
        data->isLoaded = true;
        emit sigItemContentChanged(data.key());
    }
}
Пример #24
0
void RefImage::thumbFromFile()
{
    QFile file(imagePath());

    if (file.exists())
    {
        QImageReader* imageReader = new QImageReader(imagePath());
        int imageWidth = imageReader->size().width() * (float)CAROUSEL_HEIGHT/imageReader->size().height();
        int imageHeight = CAROUSEL_HEIGHT;

        imageReader->setScaledSize(QSize(imageWidth, imageHeight));
        QImage image;
        if (imageReader->read(&image))
        {
            insertThumb(QPixmap::fromImage(image));
        }
        else
        {
            qDebug() << "read failed";
        }
    }
}
Пример #25
0
PhotoItem * PhotoItem::fromUrl(const KUrl & imageUrl, Scene * scene)
{
    QImage img;
    if (PhotoLayoutsEditor::instance()->hasInterface())
    {
        KIPI::ImageInfo info = PhotoLayoutsEditor::instance()->interface()->info(imageUrl);
        QImageReader ir (info.path().toLocalFile());
        if (!ir.read(&img))
            return 0;
    }
    else if (imageUrl.isValid())
    {
        QImageReader ir (imageUrl.toLocalFile());
        if (!ir.read(&img))
            return 0;
    }

    if (img.isNull())
        return 0;

    PhotoItem * result = new PhotoItem(img, imageUrl.fileName(), scene);
    result->d->setFileUrl(imageUrl);
    return result;
}
Пример #26
0
QImage PictureHelper::loadQImage(QString url)
{
	QImageReader reader;
	reader.setFileName(getImagePath(url));
	// Resize img if too large (1280x768)
	QSize imgSize = reader.size();
	if (imgSize.width()<imgSize.height()) {
		if (imgSize.height()>720) {
			imgSize.setWidth((int)imgSize.width() * 720 / imgSize.height());
			imgSize.setHeight(720);
			reader.setScaledSize(imgSize);
		}
	} else if (imgSize.width()>imgSize.height()) {
		if (imgSize.width() > 720) {
			imgSize.setHeight((int)imgSize.height() * 720 / imgSize.width());
			imgSize.setWidth(720);
			reader.setScaledSize(imgSize);
		}
	}
    return reader.read();
}
QPixmap loadPixmap(const QString &path)
{
    qreal ratio = 1.0;
    QPixmap pixmap;

    const qreal devicePixelRatio = qApp->devicePixelRatio();

    if (!qFuzzyCompare(ratio, devicePixelRatio)) {
        QImageReader reader;
        reader.setFileName(qt_findAtNxFile(path, devicePixelRatio, &ratio));
        if (reader.canRead()) {
            reader.setScaledSize(reader.size() * (devicePixelRatio / ratio));
            pixmap = QPixmap::fromImage(reader.read());
            pixmap.setDevicePixelRatio(devicePixelRatio);
        }
    } else {
        pixmap.load(path);
    }

    return pixmap;
}
Пример #28
0
void ImageLoader::run()
{
    typedef QHash<ImageItem*,Data>::iterator Iterator;
    
    QImageReader reader;

#ifdef Q_OS_WIN
    for(Iterator data=m_data.begin(); data!=m_data.end() && m_run; ++data) {
        data->image = QImage(data->path).scaled(m_size, m_size, Qt::KeepAspectRatio, Qt::SmoothTransformation);
        data->isLoaded = true;
        emit sigItemContentChanged(data.key());
    }
#else
    for(Iterator data=m_data.begin(); data!=m_data.end() && m_run; ++data) {
        reader.setFileName(data->path);
        qreal w = m_size;
        qreal h = m_size;
        

        if (reader.supportsOption(QImageIOHandler::Size)) {
            QSizeF imgSize = reader.size();
            
            if(imgSize.width() > imgSize.height()) {
                qreal div = m_size / imgSize.width();
                h = imgSize.height() * div;
            }
            else {
                qreal div = m_size / imgSize.height();
                w = imgSize.width() * div;
            }
        }

        
        reader.setScaledSize(QSize(w,h));
        data->image    = reader.read();
        data->isLoaded = true;
        emit sigItemContentChanged(data.key());
    }
#endif
}
Пример #29
0
/**
 * Loads the thumbnail from the metadata.
 * If no thumbnail is embedded, the whole image
 * is loaded and downsampled in a fast manner.
 * @param file the file to be loaded
 * @return QImage the loaded image. Null if no image
 * could be loaded at all.
 **/ 
QImage DkThumbNail::computeIntern(const QFileInfo file, const QSharedPointer<QByteArray> ba, 
								  int forceLoad, int maxThumbSize, int minThumbSize, 
								  bool rescale) {
	
	DkTimer dt;
	//qDebug() << "[thumb] file: " << file.absoluteFilePath();

	// see if we can read the thumbnail from the exif data
	QImage thumb;
	DkMetaDataT metaData;

	try {
		if (!ba || ba->isEmpty())
			metaData.readMetaData(file);
		else
			metaData.readMetaData(file, ba);

		// read the full image if we want to create new thumbnails
		if (forceLoad != force_save_thumb)
			thumb = metaData.getThumbnail();
	}
	catch(...) {
		// do nothing - we'll load the full file
	}
	removeBlackBorder(thumb);

	if (thumb.isNull() && forceLoad == force_exif_thumb)
		return QImage();

	bool exifThumb = !thumb.isNull();

	int orientation = metaData.getOrientation();
	int imgW = thumb.width();
	int imgH = thumb.height();
	int tS = minThumbSize;

	// as found at: http://olliwang.com/2010/01/30/creating-thumbnail-images-in-qt/
	QString filePath = (file.isSymLink()) ? file.symLinkTarget() : file.absoluteFilePath();
	QImageReader* imageReader;
	
	if (!ba || ba->isEmpty())
		imageReader = new QImageReader(filePath);
	else {
		QBuffer buffer;
		buffer.setData(ba->data());
		buffer.open(QIODevice::ReadOnly);
		imageReader = new QImageReader(&buffer, QFileInfo(filePath).suffix().toStdString().c_str());
		buffer.close();
	}

	if (thumb.isNull() || thumb.width() < tS && thumb.height() < tS) {

		imgW = imageReader->size().width();
		imgH = imageReader->size().height();	// locks the file!
	}
	//else if (!thumb.isNull())
	//	qDebug() << "EXIV thumb loaded: " << thumb.width() << " x " << thumb.height();
	
	if (rescale && (imgW > maxThumbSize || imgH > maxThumbSize)) {
		if (imgW > imgH) {
			imgH = (float)maxThumbSize / imgW * imgH;
			imgW = maxThumbSize;
		} 
		else if (imgW < imgH) {
			imgW = (float)maxThumbSize / imgH * imgW;
			imgH = maxThumbSize;
		}
		else {
			imgW = maxThumbSize;
			imgH = maxThumbSize;
		}
	}

	if (thumb.isNull() || thumb.width() < tS && thumb.height() < tS || forceLoad == force_full_thumb || forceLoad == force_save_thumb) {
		
		// flip size if the image is rotated by 90°
		if (metaData.isTiff() && abs(orientation) == 90) {
			int tmpW = imgW;
			imgW = imgH;
			imgH = tmpW;
			qDebug() << "EXIV size is flipped...";
		}

		QSize initialSize = imageReader->size();

		imageReader->setScaledSize(QSize(imgW, imgH));
		thumb = imageReader->read();

		// try to read the image
		if (thumb.isNull()) {
			DkBasicLoader loader;
			
			if (loader.loadGeneral(file, ba, true, true))
				thumb = loader.image();
		}

		// the image is not scaled correctly yet
		if (rescale && !thumb.isNull() && (imgW == -1 || imgH == -1)) {
			imgW = thumb.width();
			imgH = thumb.height();

			if (imgW > maxThumbSize || imgH > maxThumbSize) {
				if (imgW > imgH) {
					imgH = (float)maxThumbSize / imgW * imgH;
					imgW = maxThumbSize;
				} 
				else if (imgW < imgH) {
					imgW = (float)maxThumbSize / imgH * imgW;
					imgH = maxThumbSize;
				}
				else {
					imgW = maxThumbSize;
					imgH = maxThumbSize;
				}
			}

			thumb = thumb.scaled(QSize(imgW*2, imgH*2), Qt::KeepAspectRatio, Qt::FastTransformation);
			thumb = thumb.scaled(QSize(imgW, imgH), Qt::KeepAspectRatio, Qt::SmoothTransformation);
		}

		// is there a nice solution to do so??
		imageReader->setFileName("josef");	// image reader locks the file -> but there should not be one so we just set it to another file...
		delete imageReader;

	}
	else if (rescale) {
		thumb = thumb.scaled(QSize(imgW, imgH), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
		//qDebug() << "thumb loaded from exif...";
	}

	if (orientation != -1 && orientation != 0 && (metaData.isJpg() || metaData.isRaw())) {
		QTransform rotationMatrix;
		rotationMatrix.rotate((double)orientation);
		thumb = thumb.transformed(rotationMatrix);
	}

	// save the thumbnail if the caller either forces it, or the save thumb is requested and the image did not have any before
	if (forceLoad == force_save_thumb || (forceLoad == save_thumb && !exifThumb)) {
		
		try {

			QImage sThumb = thumb.copy();
			if (orientation != -1 && orientation != 0) {
				QTransform rotationMatrix;
				rotationMatrix.rotate(-(double)orientation);
				sThumb = sThumb.transformed(rotationMatrix);
			}

			metaData.setThumbnail(sThumb);

			if (!ba || ba->isEmpty())
				metaData.saveMetaData(file);
			else
				metaData.saveMetaData(file, ba);

			qDebug() << "[thumb] saved to exif data";
		}
		catch(...) {
			qDebug() << "Sorry, I could not save the metadata";
		}
	}


	if (!thumb.isNull())
		qDebug() << "[thumb] " << file.fileName() << " loaded in: " << dt.getTotal() << ((exifThumb) ? " from EXIV" : " from File");

	//if (!thumb.isNull())
	//	qDebug() << "thumb: " << thumb.width() << " x " << thumb.height();


	return thumb;
}
Пример #30
0
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    m_item1=0;
    ui->setupUi(this);

    readSettings();

    QString title=QString(APP_NAME);

    setWindowTitle(title);

    // The engine
    m_engine= new slideShowEngine;
    if(m_engine==0)
    {
        qDebug() << "error while creating the engine";
        return;
    }

    // The Model
    m_sequence = new sequenceModel;
    if(m_sequence==0)
    {
        qDebug() << "error while creating the Model";
        return;
    }
    connect(m_sequence,SIGNAL(dataChanged (QModelIndex,QModelIndex)),this,SLOT(modelChanged(QModelIndex,QModelIndex)));

    ui->listView->setModel(m_sequence);
    ui->listView->setContextMenuPolicy(Qt::CustomContextMenu);
    connect(ui->listView,SIGNAL(clicked(QModelIndex)),this,SLOT(listClicked(QModelIndex)));
    connect(ui->listView,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(listDoubleClicked(QModelIndex)));

    connect(ui->actionNew,SIGNAL(triggered()),this,SLOT(fileNewSlot()));
    connect(ui->actionOpen,SIGNAL(triggered()),this,SLOT(fileOpenSlot()));
    connect(ui->actionClose,SIGNAL(triggered()),this,SLOT(fileCloseSlot()));
    connect(ui->actionSave,SIGNAL(triggered()),this,SLOT(fileSaveSlot()));
    connect(ui->actionSave_As,SIGNAL(triggered()),this,SLOT(fileSaveAsSlot()));
    connect(ui->actionExit,SIGNAL(triggered()),this,SLOT(exitSlot()));
    connect(ui->actionExport,SIGNAL(triggered()),this,SLOT(exportToMovie()));
    connect(ui->actionOptions,SIGNAL(triggered()),this,SLOT(movieOptionsSlot()));

    connect(ui->actionManage_Soundtrack,SIGNAL(triggered()),this,SLOT(manageSoundtracks()));

    createListContextMenu();
    connect(ui->listView,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(listContextMenuRequested(QPoint)));

    connect(ui->actionPreview,SIGNAL(triggered()),this,SLOT(startSlideShowEngine()));
    connect(ui->startButton,SIGNAL(released()),this,SLOT(startSlideShowEngine()));

    // The Delegate
    m_delegate = new delegate;
    ui->listView->setItemDelegate(m_delegate);
    ui->listView->setEditTriggers(QAbstractItemView::DoubleClicked);
      //                             | QAbstractItemView::SelectedClicked);
    ui->listView->setSelectionBehavior(QAbstractItemView::SelectItems);

    // The View
    m_scene=new QGraphicsScene;
    ui->graphicsView->setScene(m_scene);    

    // set filters = all supported file formats. New plugins will automatically add new image formats
    QList <QByteArray> supportedFilters;
    QStringList filters;
    QString extensionFilter;
    QImageReader reader;

    supportedFilters = reader.supportedImageFormats();

    for (int i = 0; i < supportedFilters.size(); ++i)  // fill supported file extensions
    {
        extensionFilter.append("*.");
        extensionFilter.append(supportedFilters[i]);
        filters.append(extensionFilter);
        extensionFilter.clear();

    }

    m_FileSystemModel.setRootPath("");
    m_FileSystemModel.setNameFilters(QStringList(filters));
    ui->dirView->setModel(&m_FileSystemModel);

    connect(ui->dirView,SIGNAL(clicked(QModelIndex)),this,SLOT(dirViewClickSlot(QModelIndex)));
    connect(ui->dirView,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(dirViewDoubleClickSlot(QModelIndex)));

    ui->dirView->setColumnHidden(1,true);
    ui->dirView->setColumnHidden(2,true);
    ui->dirView->setColumnHidden(3,true);
    ui->dirView->setHeaderHidden(true);

    ui->dirView->setAnimated(false);
    ui->dirView->setIndentation(20);
    ui->dirView->setSortingEnabled(true);
    ui->dirView->show();
}