C++ format d'image avec qt

Description

Ce code source permet d'enregistrer une image (png, jpg, bmp, gif...) sous un format ".rymg"
(Ce format est en fait un QSetting de QPixmap.)
Les images enregistrées ne sont donc lisible que par un logiciel Qt.
Il peut être pratique pour empêcher les utilisateurs de voir les images de vos programmes.

Source / Exemple :


/************** Crypt.h ***************/

#ifndef HEADER_CRYPT
#define HEADER_CRYPT

#include <QtGui>
#include <QSettings>

class Crypt : public QMainWindow
{

Q_OBJECT

public:

Crypt();

void creerObjets();
void creerMenus();
void creerActions();
void creerConnexions();

private slots:

void ouvrir();
void enregistrer();
private:

QMenu *m_menuFichier;
QLabel label;
QVBoxLayout *all;
QWidget *centre;
QAction *m_actQuitter;
QAction *m_actOuvrir;
QAction *m_actEnregistrer;
QString m_chemin;
};

#endif

/********** Crypt.cpp ************/

#include "Crypt.h"
#include <fstream>

Crypt::Crypt()
{
QApplication::setStyle(new QPlastiqueStyle);

creerObjets();
creerMenus();
creerActions();
creerConnexions();

setWindowTitle("Ry-Cryptage");
setWindowState(Qt::WindowMaximized);
setCentralWidget(centre);
}

void Crypt::creerObjets()
{
m_chemin = "#Pas de fichier";
all = new QVBoxLayout;
all->addWidget(&label);
centre = new QWidget;
centre->setLayout(all);
label.setAlignment(Qt::AlignCenter);

}

void Crypt::creerMenus()
{
m_menuFichier = menuBar()->addMenu("&Fichier");

}

void Crypt::creerActions()
{
m_actOuvrir = m_menuFichier->addAction("&Ouvrir");
m_actOuvrir->setShortcut(tr("Ctrl+O"));
m_actEnregistrer = m_menuFichier->addAction("&Enregistrer");
m_actEnregistrer->setShortcut(tr("Ctrl+E"));
m_actQuitter = m_menuFichier->addAction("&Quitter");
m_actQuitter->setShortcut(tr("Ctrl+Q"));
}

void Crypt::creerConnexions()
{
connect(m_actOuvrir, SIGNAL(triggered()), this, SLOT(ouvrir()));
connect(m_actEnregistrer, SIGNAL(triggered()), this, SLOT(enregistrer()));
connect(m_actQuitter, SIGNAL(triggered()), qApp, SLOT(quit()));
}

void Crypt::ouvrir()
{
QString chemin = QFileDialog::getOpenFileName(this, "Ouvrir un fichier...", QString());
QFile file(chemin);
if (!chemin.isEmpty()) {
m_chemin = chemin;
 }

if (m_chemin.right(5) != ".rymg"){
QPixmap z = QPixmap(m_chemin);
QSize size(label.width(), label.height());
QPixmap img1 = z.scaled(size, Qt::KeepAspectRatio);

label.setPixmap(img1);
}
else {

const char *ch = m_chemin.toStdString().c_str();
QSettings *settings = new QSettings(ch, QSettings::IniFormat);
QPixmap image = settings->value("RyIMG").value<QPixmap>();

QSize size(label.width(), label.height());
QPixmap img1 = image.scaled(size, Qt::KeepAspectRatio);
label.setPixmap(img1);
}
}

void Crypt::enregistrer()
{
QString chemin = QFileDialog::getSaveFileName(this, "Enregistrer le fichier", m_chemin, "Image (*.rymg)");
QFile file(chemin);
if(!file.open(QIODevice::WriteOnly))
return;

QPixmap image(m_chemin);
const char *ch = chemin.toStdString().c_str();
QSettings *settings = new QSettings(ch, QSettings::IniFormat);
settings->setValue("RyIMG", image);

}

/********* main.cpp *********/

//POP70

#include <QApplication>
#include "Crypt.h"

int main (int argc, char* argv[])
{

QApplication app (argc, argv);

Crypt *fen = new Crypt;

fen->show();

return app.exec();

}

Conclusion :


Ici, c'est la même interface qui lit les images, les convertit est les lit sous son nouveau format.
Ce système permet de "crypter" les images de vos programmes pour que les utilisateurs ne puissent les visionner.

N'hésitez pas à me donner des idées d'améliorations.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.