• Aucun résultat trouvé

SPE - ISN

N/A
N/A
Protected

Academic year: 2022

Partager "SPE - ISN"

Copied!
5
0
0

Texte intégral

(1)

Noms des élèves :

SPE - ISN Manipuler les tableaux Durée du TP : 2h00

Organisation : Les manipulations se feront à l’aide

L’objectif du TP est de déterminer la taille d’une image en L’algorithme principal est le suivant :

Algorithme DEBUT

Choisir_le_fichier_BMP (nomFichierBmp Lire_entete_Bmp

afficherTaille FIN

1/ Créer l’application enteteBMP commandes Ouvrir et Quitter 2/ Associer le raccourcis clavier qui permettent de faire cela :

On peut le faire graphiquement avec QTDesigner ou par programmation La méthode par programmation consisterai

dans le constructeur de MainWindow commande doivent être également

actionQuitter->setShortCut

Avec QTDesigner

3/ Créer les slots associés à actionQuitter Dans mainwindow.h :

public slots:

void on_actionQuitter_triggered();

void on_actionOuvrir_triggered();

Dans le mainwindow.cpp

//--- void MainWindow::on_actionQuitter_triggered()

{

//pour quitter le close();

}

//--- void MainWindow::on_actionOuvrir_triggered()

{ }

4/ En cliquant sur Ouvrir, une fenêtre de dialogue permet de choisir un fichier BMP. La validation de ce choix restitue la variable chaine nomFichierBmp.

Ecrire le code permettant de réaliser cela

void MainWindow::on_actionOuvrir_triggered() {

QString nomFichierBmp nomFichierBmp=QFileDialog image", QString(), "Images

}

Traitement d’image

Manipuler les tableaux et les fichiers BMP.

manipulations se feront à l’aide de QT Creator installé sur les ordin L’objectif du TP est de déterminer la taille d’une image en pixels et en octets.

nomFichierBmp)

BMP et la doter d’un menu Fichier comportant les

le raccourcis clavier alt+X à la commande Quitter. Recopier les lignes n peut le faire graphiquement avec QTDesigner ou par programmation.

La méthode par programmation consisterait à placer le code ci-dessous ns le constructeur de MainWindow (mais pour cela le menu et la

être également créés de manière dynamique) :

>setShortCut(QKeySequence("Alt+X"));

actionQuitter et actionOuvrir

on_actionQuitter_triggered();

on_actionOuvrir_triggered();

--- ::on_actionQuitter_triggered()

le programme alt+X est le raccourcis

--- ::on_actionOuvrir_triggered()

4/ En cliquant sur Ouvrir, une fenêtre de dialogue permet de choisir un fichier BMP. La validation de ce choix restitue la variable chaine nomFichierBmp.

le code permettant de réaliser cela

::on_actionOuvrir_triggered() nomFichierBmp = "";

QFileDialog::getOpenFileName(this, "Ouvrir

"Images (*.bmp)");

Bac. S – Spécialité ISN

QT Creator installé sur les ordinateurs et en octets.

Recopier les lignes

---

---

4/ En cliquant sur Ouvrir, une fenêtre de dialogue permet de choisir un fichier BMP. La validation de

"Ouvrir une

(2)

Noms des élèves : Bac. S – Spécialité ISN 4/ Créer une procédure chargée d’ouvrir le fichier BMP et de placer l’entête dans un tableau.

S’agit-il d’un tableau statique ou dynamique ? Pourquoi ? Quelle doit être la taille du tableau ?

Tableau statique car sa taille est constante et égale à 54 qui est la taille d’un entête BMP classique

5/ Créer un nouveau formulaire appelé Dialog chargé d’afficher les tailles du fichier BMP. Ajouter des labels largeurLbl, hauteurLbl et tailleLbl) permettant l’affichage de la

largeur, de la hauteur et de la taille.

6/ Créer dans la classe Dialog une fonction getTexte qui récupère les données de MainWindow :

//---

void Dialog::getTexte(QString l, QString h, QString t)

{ //affiche les données de tailles ui->largeurLbl->setText(l);

ui->hauteurLbl->setText(h);

ui->tailleLbl->setText(t);

}

7/ Dans Mainwindow appeler la fonction getTexte pour passer les trois valeurs à afficher.

void MainWindow::afficherDonneesBmp() { //ouvre la fenêtre de dialogue QString largeur, hauteur, taille;

taille=rendValeur(2);

largeur=rendValeur(18);

hauteur=rendValeur(22);

Dialog *BmpDialog = new Dialog;

BmpDialog->setWindowModality(Qt::ApplicationModal);//on rend le dialog modal

BmpDialog->getTexte(largeur,hauteur,taille);

BmpDialog->show();

}

8/ A partir des données relatives au standard BMP, trouver les numéros d’index de enteteBMP pour :

Largeur : 18,19,20 et 21 Hauteur : 22,23,24 et 25 Taille : 2,3, 4 et 5

9/ Terminer le programme de sorte que la fenêtre de dialogue affiche les bonnes valeurs. On pourra comparer avec les données d’un logiciel de dessin.

Fichiers source

Dialog.h

#ifndef DIALOG_H

#define DIALOG_H

#include <QDialog>

#include "mainwindow.h"

namespace Ui {class Dialog;}

class Dialog : public QDialog {

Q_OBJECT public:

explicit Dialog(QWidget *parent = 0);

~Dialog();

void getTexte(QString l, QString h, QString t);

private:

Ui::Dialog *ui;

};

#endif // DIALOG_H

(3)

Noms des élèves : Bac. S – Spécialité ISN Mainwindow.h

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui { class MainWindow;

}

class MainWindow : public QMainWindow {

Q_OBJECT

public:

explicit MainWindow(QWidget *parent = 0);

~MainWindow();

QString *nomFichierBMP;

void ouvrirFichier(QString fichier);

void afficherDonneesBmp();

void getTexte(QString &largeur,QString &hauteur, QString &taille);

QString rendValeur(int debut);

public slots:

void on_actionQuitter_triggered();

void on_actionOuvrir_triggered();

private:

Ui::MainWindow *ui;

unsigned char enteteBmp[54];

};

#endif // MAINWINDOW_H

Dialog.cpp

#include "dialog.h"

#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) : QDialog(parent),

ui(new Ui::Dialog) {

ui->setupUi(this);

MainWindow m;

}

Dialog::~Dialog() {

delete ui;

}

//---

void Dialog::getTexte(QString l, QString h, QString t) { //affiche les données de tailles

ui->largeurLbl->setText(l);

ui->hauteurLbl->setText(h);

ui->tailleLbl->setText(t);

}

(4)

Noms des élèves : Bac. S – Spécialité ISN Main.cpp

#include "mainwindow.h"

#include <QApplication>

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

QApplication a(argc, argv);

MainWindow w;

w.show();

return a.exec();

}

Mainwindow.cpp

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include "dialog.h"

#include "ui_dialog.h"

#include <QtWidgets/QFileDialog>

#include <QDebug>

#include <math.h>

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),

ui(new Ui::MainWindow) {

ui->setupUi(this);

}

MainWindow::~MainWindow() {

delete ui;

}

//--- void MainWindow::on_actionQuitter_triggered()

{

//pour quitter le programme alt+X est le raccourcis close();

}

//--- void MainWindow::on_actionOuvrir_triggered()

{

QString nomFichierBmp = "";

nomFichierBmp=QFileDialog::getOpenFileName(this, "Ouvrir une image", QString(), "Images (*.bmp)");

ouvrirFichier(nomFichierBmp);

afficherDonneesBmp();

}

//--- void MainWindow::ouvrirFichier(QString fichier)

{//Ouvre le fichier et place l'entête dans le tableau d'entête QFile fichierBmp(fichier);

fichierBmp.open(QIODevice::ReadOnly);

fichierBmp.read((char *)enteteBmp,sizeof(enteteBmp));

}

//--- void MainWindow::afficherDonneesBmp()

{ //ouvre la fenêtre de dialogue QString largeur, hauteur, taille;

taille=rendValeur(2);

largeur=rendValeur(18);

hauteur=rendValeur(22);

Dialog *BmpDialog = new Dialog;

BmpDialog->setWindowModality(Qt::ApplicationModal);//on rend le dialog modal

BmpDialog->getTexte(largeur,hauteur,taille);

BmpDialog->show();

(5)

Noms des élèves : Bac. S – Spécialité ISN //---

QString MainWindow::rendValeur(int debut)

{ //rend en QString le nombre correspondant commencant à début et terminant à debut+4

long temp=0;

for (int i=debut;i<debut+4;i++)

temp=temp+enteteBmp[i]*pow(256,(i-debut));

return QString::number(temp);

}

Références

Documents relatifs

[r]

Effacer les modifications précédentes et écrire une deuxième structure grâce à laquelle le jour de la le champ de saisi en fonction du numéro rentré (de 1 à 7). Le premier jour de

[r]

Les types simples d´ependent du langage de programmation utilis´e (C, Pascal, Java, Python, etc) et ont des repr´esentations et codages qui peuvent varier selon la machine :.. ◮

Premiers styles Styles spécifiques Formater les textes Marge et bordure Le background Les listes Taille des éléments Positionnement Styles par état Conclusion Bluefish?. ISN - CSS :

Menu «Insertion / Courbe de tendance»; sélectionner le type selon le cas - Afficher l’équation de la courbe de tendance : clic droit sur l’équation. «propriétés de

Les établissements de type N (Restaurants et débits de boisson), EF (Etablissements flottants pour leur activité de restauration et de débit de boisson), OA (Restaurants d’altitude)

si vous sélectionnez plusieurs points, vous devez cliquer, pour une image, dans le même ordre , sur les points sélectionnés. Vous pouvez sélectionner l’origine des dates en