From 166f0e9819f45ab3fb25a01e1ee6fe6448875969 Mon Sep 17 00:00:00 2001 From: Geoffrey Frogeye Date: Sat, 26 Apr 2014 20:39:24 +0200 Subject: [PATCH] Ajout d'un site web MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pour la présentation du 5/05/14 * Générateur * En nodejs * Se base sur les fichiers .md de la branche master sur GitHub * Sépare À propos et Compilation dans README.md * Conforme GitHub Pages --- .gitignore | 3 +- Avancement.html | 41 +++++ Compilation.html | 43 +++++ LICENCE.md | 1 - README.md | 37 ---- TODO.md | 53 ------ css/contenu.css | 322 ++++++++++++++++++++++++++++++++++ css/miseEnPage.css | 52 ++++++ generator/generator.js | 114 ++++++++++++ generator/model.html | 29 +++ index.html | 42 +++++ screen.png | Bin 0 -> 93443 bytes src/affichageFenetreBGI.cpp | 30 ---- src/affichageFenetreSDL.cpp | 112 ------------ src/analyserCommande.cpp | 3 - src/image.cpp | 55 ------ src/image.h | 34 ---- src/main.cpp | 23 --- src/test_affichageFenetre.cpp | 36 ---- src/traitementImage.cpp | 145 --------------- 20 files changed, 644 insertions(+), 531 deletions(-) create mode 100644 Avancement.html create mode 100644 Compilation.html delete mode 100644 LICENCE.md delete mode 100644 README.md delete mode 100644 TODO.md create mode 100644 css/contenu.css create mode 100644 css/miseEnPage.css create mode 100644 generator/generator.js create mode 100644 generator/model.html create mode 100644 index.html create mode 100644 screen.png delete mode 100644 src/affichageFenetreBGI.cpp delete mode 100644 src/affichageFenetreSDL.cpp delete mode 100644 src/analyserCommande.cpp delete mode 100644 src/image.cpp delete mode 100644 src/image.h delete mode 100644 src/main.cpp delete mode 100644 src/test_affichageFenetre.cpp delete mode 100644 src/traitementImage.cpp diff --git a/.gitignore b/.gitignore index 1e8df95..82ac717 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ -compile* -bin/* *.sublime-* +generator/nodes_modules/* \ No newline at end of file diff --git a/Avancement.html b/Avancement.html new file mode 100644 index 0000000..c689c72 --- /dev/null +++ b/Avancement.html @@ -0,0 +1,41 @@ + + + + Avancement + + + + + + + +
+
+
+

Avancement

+

Légende

+ +
  • D Définition réalisée
  • A Algorithme réalisé
  • C Code réalisé
+ +

Liste générale

+ +

Ordre donné à titre indicatif

+ +
  • Fonction principale
  • Fonction d'analyse de commande
    • Analyse de la commande
    • Analyse des arguments
    • Correspondance commandes ↔ fonctions
  • Objets
    • Fenêtre D
      • SDL C
      • BGI A
    • Pixel C
    • Image D
  • Fonctions D
    • Gestion de fichier
      • Créer
      • Ouvrir
      • Enregistrer
      • Importer
    • Édition
      • Copier tout
      • Couper tout
      • Coller tout
      • Annuler
      • Refaire
    • Couleur
      • Teinte
      • Saturation
      • Luminosité
      • Contraste
    • Dessin
      • Trait
      • Rectangle
      • Cercle
      • Disque
    • Géométrie
      • Zoom
      • Pivot
      • Redimensionner
    • Conversion du mode
      • Binaire
      • Niveaux de gris
      • Couleur
    • Aide
  • Documentation
+
+
+
+ + + \ No newline at end of file diff --git a/Compilation.html b/Compilation.html new file mode 100644 index 0000000..2c699fa --- /dev/null +++ b/Compilation.html @@ -0,0 +1,43 @@ + + + + Compilation + + + + + + + +
+
+
+

Compilation

+

Windows

+ +
  1. Télécharger et installer MinGW
  2. Inclure MinGW dans la variable d'environnement %PATH% : set path=%path%;C:\MinGW\bin
  3. Créer le dossier bin à la racine du dépôt : mkdir bin
  4. Télécharger la bibliothèque de développement SDL 1.2.15, copier le contenu des dossier lib et include de l'archive téléchargée dans le dossier de MinGW
  5. Télécharger la bibliothèque d’exécution de SDL 1.2.15 et placer SDL.dll dans le dossier bin
  6. Compiler : g++ src/main.cpp -o bin/main.exe -lmingw32 -lSDLmain -lSDL -static-libgcc -static-libstdc++
+ +

L’exécutable se trouvera dans le dossier bin

+ +

Linux

+ +
  1. Installer la bibliothèque de développement SDL 1.2 : sudo apt-get install libsdl1.2-dev
  2. Créer le dossier bin à la racine du dépôt : mkdir bin
  3. Compiler : g++ src/main.cpp -o bin/main -lSDLmain -lSDL
+ +

L’exécutable se trouvera dans le dossier bin

+
+
+
+ + + \ No newline at end of file diff --git a/LICENCE.md b/LICENCE.md deleted file mode 100644 index 68684ea..0000000 --- a/LICENCE.md +++ /dev/null @@ -1 +0,0 @@ -*Copyright 2014 Geoffrey et Lucas* diff --git a/README.md b/README.md deleted file mode 100644 index 379ef1b..0000000 --- a/README.md +++ /dev/null @@ -1,37 +0,0 @@ -#Projet d'ISN de Lucas et Geoffrey - -##À propos... - -###De ce dépôt -Ce dépôt a été crée pour faciliter le développement du projet. Son caractère public n'est que lié aux nécessité de GitHub. Si vous ne savez pas de quel projet il s'agit, vous perdez votre temps ici. L'absence de licence (du moins jusqu'aux épreuves) vous interdit de distribuer ou de réutiliser le code, qui de toute façon ne vous aurait pas été utile. - -###De ce projet -Ceci est la création de Lucas et de Geoffrey pour l'option Informatique et Sciences du Numérique qui sera présenté lors du Baccalauréat 2013/2014. -Nos noms complets et le nom du lycée sont masqués pour des raisons d'intimité. Les personnes devant nous reconnaître nous reconnaîtront. - -###Du programme -Ce programme est un éditeur basique d'images [PBM/PGM/PPM](http://fr.wikipedia.org/wiki/Portable_pixmap) s’exécutant en ligne de commande. - -*Statut :* Prétotype - -##Compilation -###Windows -1. Télécharger et installer [MinGW](http://www.mingw.org/) -2. Inclure **MinGW** dans la variable d'environnement ```%PATH%``` : ```set path=%path%;C:\MinGW\bin``` -3. Créer le dossier *bin* à la racine du dépôt : ```mkdir bin``` -4. Télécharger la [bibliothèque de développement SDL 1.2.15](http://www.libsdl.org/release/SDL-devel-1.2.15-mingw32.tar.gz), copier le contenu des dossier *lib* et *include* de l'archive téléchargée dans le dossier de **MinGW** -5. Télécharger la [bibliothèque d’exécution de SDL 1.2.15](http://www.libsdl.org/release/SDL-1.2.15-win32.zip) et placer *SDL.dll* dans le dossier *bin* -6. Compiler : ```g++ src/main.cpp -o bin/main.exe -lmingw32 -lSDLmain -lSDL -static-libgcc -static-libstdc++``` - -L’exécutable se trouvera dans le dossier *bin* - -###Linux -1. Installer la **bibliothèque de développement SDL 1.2** : ```sudo apt-get install libsdl1.2-dev``` -2. Créer le dossier *bin* à la racine du dépôt : ```mkdir bin``` -3. Compiler : ```g++ src/main.cpp -o bin/main -lSDLmain -lSDL``` - -L’exécutable se trouvera dans le dossier *bin* - - ----------- -*Copyright 2014 Lucas et Geoffrey* diff --git a/TODO.md b/TODO.md deleted file mode 100644 index 300374d..0000000 --- a/TODO.md +++ /dev/null @@ -1,53 +0,0 @@ -#À réaliser - -####Légende -* **D** Définition réalisée -* **A** Algorithme réalisé -* **C** Code réalisé - -####Liste générale -*Ordre donné à titre indicatif* - -* Fonction principale -* Fonction d'analyse de commande - * Analyse de la commande - * Analyse des arguments - * Correspondance commandes ↔ fonctions -* Objets - * Fenêtre **D** - * SDL **C** - * BGI **A** - * Pixel **C** - * Image **D** -* Fonctions **D** - * Gestion de fichier - * Créer - * Ouvrir - * Enregistrer - * Importer - * Édition - * Copier tout - * Couper tout - * Coller tout - * Annuler - * Refaire - * Couleur - * Teinte - * Saturation - * Luminosité - * Contraste - * Dessin - * Trait - * Rectangle - * Cercle - * Disque - * Géométrie - * Zoom - * Pivot - * Redimensionner - * Conversion du mode - * Binaire - * Niveaux de gris - * Couleur - * Aide -* Documentation diff --git a/css/contenu.css b/css/contenu.css new file mode 100644 index 0000000..8aac17d --- /dev/null +++ b/css/contenu.css @@ -0,0 +1,322 @@ +/* Style CSS pour Markdown depuis https://github.com/jasonm23/markdown-css-themes */ + +body { + font-family: Helvetica, arial, sans-serif; + font-size: large; + line-height: 1.6; + padding-top: 10px; + padding-bottom: 10px; + background-color: white; + padding: 30px; } + +body > *:first-child { + margin-top: 0 !important; } +body > *:last-child { + margin-bottom: 0 !important; } + +a { + color: #4183C4; } +a.absent { + color: #cc0000; } +a.anchor { + display: block; + padding-left: 30px; + margin-left: -30px; + cursor: pointer; + position: absolute; + top: 0; + left: 0; + bottom: 0; } + +h1, h2, h3, h4, h5, h6 { + margin: 20px 0 10px; + padding: 0; + font-weight: bold; + -webkit-font-smoothing: antialiased; + cursor: text; + position: relative; } + +h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor, h5:hover a.anchor, h6:hover a.anchor { + text-decoration: none; } + +h1 tt, h1 code { + font-size: inherit; } + +h2 tt, h2 code { + font-size: inherit; } + +h3 tt, h3 code { + font-size: inherit; } + +h4 tt, h4 code { + font-size: inherit; } + +h5 tt, h5 code { + font-size: inherit; } + +h6 tt, h6 code { + font-size: inherit; } + +h1 { + font-size: 28px; + color: black; } + +h2 { + font-size: 24px; + border-bottom: 1px solid #cccccc; + color: black; } + +h3 { + font-size: 18px; } + +h4 { + font-size: 16px; } + +h5 { + font-size: 14px; } + +h6 { + color: #777777; + font-size: 14px; } + +p, blockquote, ul, ol, dl, li, table, pre { + margin: 15px 0; } + +hr { + background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAECAYAAACtBE5DAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OENDRjNBN0E2NTZBMTFFMEI3QjRBODM4NzJDMjlGNDgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OENDRjNBN0I2NTZBMTFFMEI3QjRBODM4NzJDMjlGNDgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4Q0NGM0E3ODY1NkExMUUwQjdCNEE4Mzg3MkMyOUY0OCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4Q0NGM0E3OTY1NkExMUUwQjdCNEE4Mzg3MkMyOUY0OCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PqqezsUAAAAfSURBVHjaYmRABcYwBiM2QSA4y4hNEKYDQxAEAAIMAHNGAzhkPOlYAAAAAElFTkSuQmCC) repeat-x 0 0; + border: 0 none; + color: #999; + height: 4px; + padding: 0; +} + +body > h2:first-child { + margin-top: 0; + padding-top: 0; } +body > h1:first-child { + margin-top: 0; + padding-top: 0; } +body > h1:first-child + h2 { + margin-top: 0; + padding-top: 0; } +body > h3:first-child, body > h4:first-child, body > h5:first-child, body > h6:first-child { + margin-top: 0; + padding-top: 0; } + +a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 { + margin-top: 0; + padding-top: 0; } + +h1 p, h2 p, h3 p, h4 p, h5 p, h6 p { + margin-top: 0; } + +li p.first { + display: inline-block; } +li { + margin: 0; } +ul, ol { + padding-left: 30px; } + +ul :first-child, ol :first-child { + margin-top: 0; } + +dl { + padding: 0; } +dl dt { + font-size: 14px; + font-weight: bold; + font-style: italic; + padding: 0; + margin: 15px 0 5px; } +dl dt:first-child { + padding: 0; } +dl dt > :first-child { + margin-top: 0; } +dl dt > :last-child { + margin-bottom: 0; } +dl dd { + margin: 0 0 15px; + padding: 0 15px; } +dl dd > :first-child { + margin-top: 0; } +dl dd > :last-child { + margin-bottom: 0; } + +blockquote { + border-left: 4px solid #dddddd; + padding: 0 15px; + color: #777777; } +blockquote > :first-child { + margin-top: 0; } +blockquote > :last-child { + margin-bottom: 0; } + +table { + padding: 0;border-collapse: collapse; } +table tr { + border-top: 1px solid #cccccc; + background-color: white; + margin: 0; + padding: 0; } +table tr:nth-child(2n) { + background-color: #f8f8f8; } +table tr th { + font-weight: bold; + border: 1px solid #cccccc; + margin: 0; + padding: 6px 13px; } +table tr td { + border: 1px solid #cccccc; + margin: 0; + padding: 6px 13px; } +table tr th :first-child, table tr td :first-child { + margin-top: 0; } +table tr th :last-child, table tr td :last-child { + margin-bottom: 0; } + +img { + max-width: 100%; } + +span.frame { + display: block; + overflow: hidden; } +span.frame > span { + border: 1px solid #dddddd; + display: block; + float: left; + overflow: hidden; + margin: 13px 0 0; + padding: 7px; + width: auto; } +span.frame span img { + display: block; + float: left; } +span.frame span span { + clear: both; + color: #333333; + display: block; + padding: 5px 0 0; } +span.align-center { + display: block; + overflow: hidden; + clear: both; } +span.align-center > span { + display: block; + overflow: hidden; + margin: 13px auto 0; + text-align: center; } +span.align-center span img { + margin: 0 auto; + text-align: center; } +span.align-right { + display: block; + overflow: hidden; + clear: both; } +span.align-right > span { + display: block; + overflow: hidden; + margin: 13px 0 0; + text-align: right; } +span.align-right span img { + margin: 0; + text-align: right; } +span.float-left { + display: block; + margin-right: 13px; + overflow: hidden; + float: left; } +span.float-left span { + margin: 13px 0 0; } +span.float-right { + display: block; + margin-left: 13px; + overflow: hidden; + float: right; } +span.float-right > span { + display: block; + overflow: hidden; + margin: 13px auto 0; + text-align: right; } + +code, tt { + margin: 0 2px; + padding: 0 5px; + white-space: nowrap; + border: 1px solid #ccc; + background-color: #f8f8f8; + border-radius: 3px; } + +pre code { + margin: 0; + padding: 0; + white-space: pre; + border: none; + background: transparent; } + +.highlight pre { + background-color: #f8f8f8; + border: 1px solid #cccccc; + font-size: 13px; + line-height: 19px; + overflow: auto; + padding: 6px 10px; + border-radius: 3px; } + +pre { + background-color: #f8f8f8; + border: 1px solid #cccccc; + font-size: 13px; + line-height: 19px; + overflow: auto; + padding: 6px 10px; + border-radius: 3px; } +pre code, pre tt { + background-color: transparent; + border: none; } + +sup { + font-size: 0.83em; + vertical-align: super; + line-height: 0; +} +* { + -webkit-print-color-adjust: exact; +} +@media screen and (min-width: 914px) { + body { + width: 854px; + margin:0 auto; + } +} +@media print { + table, pre { + page-break-inside: avoid; + } + pre { + word-wrap: break-word; + } +} + +/* Theme personalisé */ + +.todoEl { + display: inline-block; + color: white; + font-weight: bold; + padding: 0px 1px 0px 1px; + margin: 1px; + background-color: black; + border-radius: 3px; +} + +.todo_D { + background-color: #95336a; +} + +.todo_A { + background-color: #326189; +} + +.todo_C { + background-color: #5d7e31; +} \ No newline at end of file diff --git a/css/miseEnPage.css b/css/miseEnPage.css new file mode 100644 index 0000000..9352c7b --- /dev/null +++ b/css/miseEnPage.css @@ -0,0 +1,52 @@ +#wrapper { + margin-top: 50px; +} + +nav { + background-color: #333; + text-align: center; + position: fixed; + left: 0; + top: 0; + width: 100%; + z-index: 10000; +} + +nav ul { + margin: 5px 0px 5px 0px; +} + +nav li { + display: inline-block; + font-size: larger; +} + +nav a { + position: relative; + display: inline-block; + color: #fff; + text-decoration: none; + border-radius: 8px; + padding: 5px; + transition: background-color .2s ease-in-out; +} + + +nav ul li:before { + content: '•'; + color: #aaa; + margin: 0px 5px 0px 5px; + display: inline-block; +} + +nav ul li:first-child:before { + content : ''; +} + +nav a:hover { + background: #222; +} + +nav a:active { + background: #444; +} \ No newline at end of file diff --git a/generator/generator.js b/generator/generator.js new file mode 100644 index 0000000..509ae7c --- /dev/null +++ b/generator/generator.js @@ -0,0 +1,114 @@ +#!/bin/env node + +/*jslint node: true, forin: true, indent: 4 */ + +"use strict"; + +// Dépendances +var https = require('https'), + fs = require('fs'), + markdown = require('markdown').markdown; + +// Variables +var liste = []; + +// Fonctions +function recupererFichier(nomFichier, retour) { + var contenu = ''; + console.log('Téléchargement de ' + nomFichier); + https.get('https://raw.githubusercontent.com/GeoffreyFrogeye/PILG/master/' + nomFichier, function (res) { + console.log('Réponse pour ' + nomFichier + ' obtenue (' + res.statusCode + ')'); + res.on('data', function (morceau) { + contenu += morceau; + }).on('end', function () { + console.log('Fichier ' + nomFichier + ' téléchargé'); + retour(contenu); + }); + }).on('error', function (e) { + console.error('Impossible de récupérer le fichier ' + nomFichier + ' car ' + e.message); + }); +} + +function genererPages(liste) { + var nav = '', + element; + for (element in liste) { + if (liste[element].titre === 'À propos') { + liste[element].titreCourt = 'index'; + } else { + liste[element].titreCourt = liste[element].titre + .replace(/À/, 'A') + .replace(/ /, '_') + .replace(/\W/g, ''); + } + if (!liste[element].lien) { + liste[element].lien = liste[element].titreCourt + '.html'; + } + nav += '
  • ' + liste[element].titre + '
  • \n'; + } + fs.readFile('model.html', function (err, contenuModele) { + if (!err) { + liste.forEach(function (element) { + var contenuHTML; + if (element.contenu) { + contenuHTML = contenuModele + .toString('utf-8') + .replace(/%%TITRE%%/g, element.titre) + .replace(/%%NAV%%/, nav) + .replace(/%%CONTENU%%/, element.contenu) + .replace(/%%LICENSE%%/, 'Copyright 2014 Geoffrey et Lucas'); + fs.writeFile('../' + element.titreCourt + '.html', contenuHTML, function (err) { + if (!err) { + console.log('Écrit ' + element.titreCourt + '.html'); + } else { + console.error('Impossible d\'écrire' + element.titreCourt + '.html', err); + } + }); + + } + }); + } else { + console.err('Impossible d\'ouvrir le fichier modèle'); + } + }); +} + +// Execution +function executer() { + recupererFichier('README.md', function (contenu) { + var decoupe = contenu + .toString('utf-8') + .replace(/##Compilation\n/, '%%SPLIT%%') + .replace(/Nos noms complets et le nom du lycée sont masqués pour des raisons d'intimité\. Les personnes devant nous reconnaître nous reconnaîtront\./g, '') + .replace(/##De ce dépôt[ \wæâ€êÿûîœôäßëðüïö©éÉèÈçÇàÀ\.\-\'\,\(\)\n]+?##/g, '#') + .replace(/#(#+)/g, '$1') + .replace(/^#[ \wæâ€êÿûîœôäßëðüïö©éÉèÈçÇàÀ\.\-\']+\n/g, '') + .replace(/\n#[ \wæâ€êÿûîœôäßëðüïö©éÉèÈçÇàÀ\.\-\']+\n/g, '') + .replace(/(De ce)|(Du)/g, 'Le') + .replace(/-+\n\*Copyright[ \wæâ€êÿûîœôäßëðüïö©éÉèÈçÇàÀ\.\-\']+\*/g, '') + .split('%%SPLIT%%'); + liste.push({ + titre: 'À propos', + contenu: markdown.toHTML(decoupe[0]) + '\nCapture d\'écran du code' + }, { + titre: 'Compilation', + contenu: markdown.toHTML(decoupe[1]) + }); + recupererFichier('TODO.md', function (contenu) { + liste.push({ + titre: "Avancement", + contenu: markdown.toHTML(contenu + .toString('utf-8') + .replace(/^#[ \wæâ€êÿûîœôäßëðüïö©éÉèÈçÇàÀ\.\-\']+\n/g, '') + .replace(/\n#[ \wæâ€êÿûîœôäßëðüïö©éÉèÈçÇàÀ\.\-\']+\n/g, '')) + .replace(/([DAC])<\/strong>/g, '$1') + }, { + titre: 'Code source', + lien: 'https://github.com/GeoffreyFrogeye/PILG' + }); + genererPages(liste); + }); + }); +} + +executer(); \ No newline at end of file diff --git a/generator/model.html b/generator/model.html new file mode 100644 index 0000000..bdaa0ca --- /dev/null +++ b/generator/model.html @@ -0,0 +1,29 @@ + + + + %%TITRE%% + + + + + + + +
    +
    +
    +

    %%TITRE%%

    +%%CONTENU%% +
    +
    +
    +
    +
    +%%LICENSE%% +
    + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..c37421d --- /dev/null +++ b/index.html @@ -0,0 +1,42 @@ + + + + À propos + + + + + + + +
    +
    +
    +

    À propos

    +

    Le projet

    + +

    Ceci est la création de Lucas et de Geoffrey pour l'option Informatique et Sciences du Numérique qui sera présenté lors du Baccalauréat 2013/2014.

    + +

    Le programme

    + +

    Ce programme est un éditeur basique d'images PBM/PGM/PPM s’exécutant en ligne de commande.

    + +

    Statut : Prétotype

    +Capture d'écran du code +
    +
    +
    +
    +
    +Copyright 2014 Geoffrey et Lucas +
    + + \ No newline at end of file diff --git a/screen.png b/screen.png new file mode 100644 index 0000000000000000000000000000000000000000..c3ffea2e94e60cccd7dee2a165fedb16228b9e57 GIT binary patch literal 93443 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 literal 0 HcmV?d00001 diff --git a/src/affichageFenetreBGI.cpp b/src/affichageFenetreBGI.cpp deleted file mode 100644 index 12894de..0000000 --- a/src/affichageFenetreBGI.cpp +++ /dev/null @@ -1,30 +0,0 @@ -#include - -int ouvrirFenetre(int dimensionX, int dimensionY, const char* nom) { // Crée une fenêtre - initwindow(dimensionX, dimensionY, nom, 0, 0); - return 0; -} - -int setNomFenetre(const char* nom) { // Change le nom de la fenêtre - return 0; -} - -int pointFenetre(int x, int y, int r, int v, int b) { - putpixel(x, y, COLOR(r, v, b)); - return 0; -} - -int afficherFenetre() { - - return 0; -} - -int attendreFenetre() { - while (kbhit()) { - delay(100); - } -} - -int fermerFenetre() { - closegraph(ALL_WINDOWS); -} diff --git a/src/affichageFenetreSDL.cpp b/src/affichageFenetreSDL.cpp deleted file mode 100644 index 57b0d8a..0000000 --- a/src/affichageFenetreSDL.cpp +++ /dev/null @@ -1,112 +0,0 @@ -#include -#include - -int fenetreDimensionX; // Stocke les dimensions X de la fenêtre -int fenetreDimensionY; // Stocke les dimensions Y de la fenêtre -SDL_Surface* fenetreEcran; -SDL_Surface* fenetreImage; - - -void definirPixel(SDL_Surface *surface, int x, int y, Uint32 pixel) -{ - /*nbOctetsParPixel représente le nombre d'octets utilisés pour stocker un pixel. - En multipliant ce nombre d'octets par 8 (un octet = 8 bits), on obtient la profondeur de couleur - de l'image : 8, 16, 24 ou 32 bits.*/ - int nbOctetsParPixel = surface->format->BytesPerPixel; - /*Ici p est l'adresse du pixel que l'on veut modifier*/ - /*surface->pixels contient l'adresse du premier pixel de l'image*/ - Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * nbOctetsParPixel; - - /*Gestion différente suivant le nombre d'octets par pixel de l'image*/ - switch(nbOctetsParPixel) - { - case 1: - *p = pixel; - break; - - case 2: - *(Uint16 *)p = pixel; - break; - - case 3: - /*Suivant l'architecture de la machine*/ - if(SDL_BYTEORDER == SDL_BIG_ENDIAN) - { - p[0] = (pixel >> 16) & 0xff; - p[1] = (pixel >> 8) & 0xff; - p[2] = pixel & 0xff; - } - else - { - p[0] = pixel & 0xff; - p[1] = (pixel >> 8) & 0xff; - p[2] = (pixel >> 16) & 0xff; - } - break; - - case 4: - *(Uint32 *)p = pixel; - break; - } -} - -int ouvrirFenetre(int dimensionX, int dimensionY, std::string nom) { // Crée une fenêtre - SDL_Init(SDL_INIT_VIDEO); - fenetreDimensionX = dimensionX; - fenetreDimensionY = dimensionY; - fenetreEcran = SDL_SetVideoMode(fenetreDimensionX, fenetreDimensionY, 32, SDL_HWSURFACE); - fenetreImage = SDL_CreateRGBSurface(SDL_HWSURFACE, fenetreDimensionX, fenetreDimensionX, 32, 0, 0, 0, 0); - SDL_FillRect(fenetreImage, NULL, SDL_MapRGB(fenetreEcran->format, 0, 0, 0)); - setNomFenetre(nom); - return 0; -} - -int setNomFenetre(std::string nom) { // Change le nom de la fenêtre - SDL_WM_SetCaption(nom.c_str(), NULL); - return 0; -} - -int pointFenetre(int x, int y, int r, int v, int b) { - // TODO (erreur) Vérifications des dimensions - - // std::cout << "(" << x << ";" << y << ") = (" << r << ";" << v << ";" << b << ")" << std::endl; // DEBUG - - Uint32 pixel; - - Uint8 u_r, u_v, u_b, u_a; - u_r = (Uint8) (r > 255 ? 255 : r); // TODO (performance, facultatif, erreur) Si > 255, on renvoit 0xff sinon on convertit - u_v = (Uint8) (v > 255 ? 255 : v); - u_b = (Uint8) (b > 255 ? 255 : b); - u_a = (Uint8) 255; - - pixel = SDL_MapRGBA(fenetreImage->format, u_r, u_v, u_b, u_a); - - SDL_LockSurface(fenetreImage); - definirPixel(fenetreImage, x, y, pixel); - SDL_UnlockSurface(fenetreImage); - - return 0; -} - -int afficherFenetre() { - // TODO (performance, facultatif) fenetreImage pourrait être crée pendant afficherFenetre(), et pointFenetre() ne modifierait qu'un tableau - SDL_Rect position; - position.x = 0; position.y = 0; - SDL_BlitSurface(fenetreImage, NULL, fenetreEcran, &position); - SDL_Flip(fenetreEcran); - return 0; -} - -int attendreFenetre() { - SDL_Event evenement; - - while (evenement.type != SDL_QUIT) { - SDL_WaitEvent(&evenement); - } -} - -int fermerFenetre() { - SDL_FreeSurface(fenetreImage); - SDL_Quit(); - return 0; -} diff --git a/src/analyserCommande.cpp b/src/analyserCommande.cpp deleted file mode 100644 index 25a9d17..0000000 --- a/src/analyserCommande.cpp +++ /dev/null @@ -1,3 +0,0 @@ -function analyserCommande(string nom) { - -} diff --git a/src/image.cpp b/src/image.cpp deleted file mode 100644 index 7bff85c..0000000 --- a/src/image.cpp +++ /dev/null @@ -1,55 +0,0 @@ -int Image::Image(int dimensionX, int dimensionY, int maxComposante, int typeComposantes) { // Crée l'objet Image - -} -// Getters -int Image::g_dimensionX() { - return m_dimensionX; -} -int Image::g_dimensionY() { - return m_dimensionY; - -} -int Image::g_typeComposante() { - return m_typeComposante; -} -int Image::g_maxComposante() { - return m_typeComposante; - -} -int g_point(int x, int y, Pixel &pixel) { - if (en_Limites(x, y)) { - pixel = m_tab[x][y]; - return 0; - } else { - return 1; - } -} -// Setters - -int Image::s_point(int x, int y, Pixel pixel) { - if (en_Limites(x, y) && pixel.typeComposantes == Image.g_typeComposante && pixel.maxComposante == Image.g_maxComposante && enLimitesComposantes(pixel)) { - m_tab[x][y] = pixel; - } - -} - -bool Image::enLimitesComposantes(Pixel pixel) { - switch (pixel.typeComposantes) { - case 0: - return true; - break; - case 1: - return pixel.m <= pixel.maxComposante; - break; - case 2: - return (pixel.r <= pixel.maxComposante && pixel.v <= pixel.maxComposante && pixel.b <= pixel.maxComposante); - break; - default: - return false; - break; - } -} - -bool Image::enLimites(int x, int y) { - return (x >= 0 && x < g_dimensionX && y >= 0 && y < g_dimensionY); -} \ No newline at end of file diff --git a/src/image.h b/src/image.h deleted file mode 100644 index 7f06b6e..0000000 --- a/src/image.h +++ /dev/null @@ -1,34 +0,0 @@ -#include - -typedef Pixel { - int typeComposantes; - int maxComposante; - int r; - int v; - int b; - int g; - bool n; - -} Pixel; - -class Image { -public: - int Image(int dimensionX, int dimensionY, int maxComposante, int typeComposantes); // Crée l'objet Image - // Getters - int g_dimensionX(); - int g_dimensionY(); - int g_typeComposante(); - int g_maxComposante(); - Pixel g_point(int x, int y); - // Setters - int s_point(int x, int y, Pixel pixel); - -private: - bool enLimitesComposantes(Pixel pixel); - bool enLimites(int x, int y); - int m_dimensionX; - int m_dimensionY; - int m_typeComposantes; // 0 : N&B, 1 : Niveaux de gris, 2 : RVB - int m_maxComposante; // Maximum de composante (inutilisé pour binaire) - vector< vector< Pixel > > m_tab; -}; diff --git a/src/main.cpp b/src/main.cpp deleted file mode 100644 index dd7caf6..0000000 --- a/src/main.cpp +++ /dev/null @@ -1,23 +0,0 @@ -#include -#include - -#include "affichageFenetreSDL.cpp" - - -using namespace std; - -// Insertion des ensembles de fonctions massives séparés pour plus de clarté -#include "analyserCommande.cpp" -#include "traitementImage.cpp" - -int main(int argc, char* args[]) { - -#if defined(WIN32) // Permet de refaire fonctionner cin et cout sous Windows après démarrage de SDL - freopen("CON", "w", stdout); - freopen("CON", "w", stderr); -#endif - - cout << "PILG" << endl; // Message d'entrée et de test - - return 0; -} diff --git a/src/test_affichageFenetre.cpp b/src/test_affichageFenetre.cpp deleted file mode 100644 index c7366d2..0000000 --- a/src/test_affichageFenetre.cpp +++ /dev/null @@ -1,36 +0,0 @@ -#include -#include - -#include "affichageFenetreBGI.cpp" - -using namespace std; - - -int main(int argc, char* args[]) { - -#if defined(WIN32) // Permet de refaire fonctionner cin et cout sous Windows après démarrage de SDL - freopen("CON", "w", stdout); - freopen("CON", "w", stderr); -#endif - - cout << "TEST AFFICHAGE FENETRE" << endl; // Message d'entrée et de test - - int dimX = 640, dimY = 480; - ouvrirFenetre(dimX, dimY, "Test affichage fenêtre"); - - for (int c = 0; c <= 255; c++) { // À peu près 58 FPS - for (int x = 0; x <= dimX; x++) { - for (int y = 0; y <= dimY; y++) { - pointFenetre(x, y, c, 255-c, 0); - } - } - afficherFenetre(); - } - - cout << "Éxecution du programme terminée. Vous pouvez quitter la fenêtre." << endl; - attendreFenetre(); - fermerFenetre(); - - - return 0; -} diff --git a/src/traitementImage.cpp b/src/traitementImage.cpp deleted file mode 100644 index 9cc6850..0000000 --- a/src/traitementImage.cpp +++ /dev/null @@ -1,145 +0,0 @@ -// Gestion de fichiers -int creer(Image &sortie, int dimensionX, int dimensionY, int typeComposante, int maxComposante) { // Créer une image de dimensions X et Y - -} -int ouvrir(Image &sortie, string nomFichier) { // Ouvrir une image existante à partir du nom du fichier - -} -int sauver(Image entree, string nomFichier) { // Sauvegarder l'image obtenue dans un nouveau fichier - -} -int import(Image entree, Image &sortie, string nomFichier, int x, int y) { - -} - -// Edition -int copier() { // Copie tous les pixels - -} -int couper() { // Copie et remplace par du blanc tous les pixels - -} -int coller() { // Coller les pixels copiés ou coupés. - -} -int annuler() { // Annuler la dernière action. - -} -int refaire() { // répeter la dernière action - -} - -// Couleur -int teinte(Image entree, Image &sortie, float teinte) { // Change la teinte de l'image - // Si la teinte appartient à [0;1[ - // r1 = 0 - // r2 = 1 - // v1 = 1 - // v2 = 2 - // b1 = 2 - // b2 = 0 - // Valeur = Teinte - // Sinon Si la teinte appartient à [1;2[ - // r1 = 1 - // r2 = 2 - // v1 = 2 - // v2 = 0 - // b1 = 0 - // b2 = 1 - // Valeur = Teinte-1 - // Sinon Si la teinte appartient à [2;3] - // r1 = 2 - // r2 = 0 - // v1 = 0 - // v2 = 1 - // b1 = 1 - // b2 = 2 - // Valeur = Teinte-2 - // Fin Si - // Pour x=0 à x=image.getDimensionX() - // Pour y=0 à y=image.getDimensionY() - // - // - // - // pixel.r = r1+(r2-r1)*valeur - // pixel.v = v1+(v2-v1)*valeur - // pixel.b = b1+(b2-b1)*valeur - // Fin Pour - // Fin Pour -} - -int saturation(Image entree, Image &sortie, float saturation) { // Sature l'image - // Pour x = xMin to x = xMax - // Pour y = yMin to y = yMax - // Ajouter la variable saturation à chaque valeur de chaque pixel - // Ne pas dépasser le seuil limite MaxComposante !!! - // Fin Pour - // Fin Pour -} -int luminosite(Image entree, Image &sortie, float luminosite) { // Augmente la luminosité de l'image - // Pour x=0 à x=image.g_DimensionX() - // Pour y=0 à y=image.g_DimensionY() - // si image.g_typeComposante=1 - // pixel = image.g_point(x,y); - // pixel.g = luminosite*10+pixel.g; - // image.s_point(x, y, pixel); - // sinon si image.g_typeComposante=2 - // pixel = image.g_point(x,y); - // pixel.r = luminosite*10+pixel.r; - // pixel.v = luminosite*10+pixel.v; - // pixel.b = luminosite*10+pixel.b; - // image.s_point(x, y, pixel); - // Fin si - // Fin Pour - // Fin Pour -} -int contraste(Image entree, Image &sortie, float contraste) { // Accentue les contrastes de l'image - // pour x=0 à x=image.g_dimensionX() - //pour y=0 à x=image.g_DimensionY() - //si image.g_typeComposante=1 - //pixel = image.g_point(x,y); - //pixel.g = contraste*pixel.g; - // if pixel.g > Image.g_maxComposante - // pixel.g = Image.g_maxComposante - // end if - - -} - -// Dessin -int trait(Image entree, Image &sortie, int x1, int y1, int x2, int y2, Pixel, pixel) { // Dessine un trait d'un point (x1,y1 à un point (x2,y2) - -} -int rectangle(Image entree, Image &sortie, int x1, int y1, int x2, int y2) { - -} -int cercle(Image entree, Image &sortie, int x, int y, int r) { - -} - -// Geométrie -int zoom(Image entree, Image &sortie) { - -} -int pivoter(Image entree, Image &sortie) { - -} -int redimensionner(Image entree, Image &sortie) { - -} - -// Modification couleur -int convBIN(Image entree, Image &sortie) { - -} -int convNIV(Image entree, Image &sortie) { - -} -int convRVB(Image entree, Image &sortie) { - -} - -//Help -int aide() { - -}