Le programme, testé sour borland c++ builder 4, affiche un diaporama d'images de format jpeg en utilisant une liste chainée.
Deux boutons permettent de faire défiler les images dans les deux sens.
Pour pointer les images, le programme lit dans un fichier "images.txt" qui répertorie les images contenues dans un dossier "images".
C'est surtout l'affichage d'une image sous borland, l'utilisation de la liste et la lecture d'un fichier qui sont intéressantes.
Source / Exemple :
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "BaseDeDonnees.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
/*
Chemin du fichier contenant les images JPEG à afficher
Sur mon ordinateur, c'était le dossier "images" contenu dans le répertoire courant.
Mettre exclusivement dans ce dossier des images au format JPEG.
String cheminDesImages = "images\\" ;
/*
Exemple de fichier de données :
--- Début du fichier
batteur.JPG
chanteur_guitarre.JPG
classique.jpg
--- Fin du fichier
string nomfichier = "images.txt" ;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
ouvrirFichier() ;
afficherImage(noeud) ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
noeud = noeud->fils ;
if (noeud == NULL)
noeud = liste ;
afficherImage(noeud) ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if (noeud->pere == NULL)
{
while(noeud->fils != NULL)
noeud = noeud->fils ;
} else
noeud = noeud->pere ;
afficherImage(noeud) ;
}
//---------------------------------------------------------------------------
void TForm1::ouvrirFichier()
{
char c ;
String phrase = "" ;
liste = new chaine ;
liste->pere = NULL ;
liste->fils = NULL ;
ifstream f(nomfichier.c_str(),ios::in);
if(f)
{
while (f)
{
c = f.get();
if (c == '\n')
{
inserer(phrase, &liste, NULL) ;
phrase = "" ;
}
else
phrase += c ;
}
f.close();
}
liste = liste->fils ;
liste->pere = NULL ;
noeud = liste ;
Memo1->Clear() ;
afficher(liste) ;
}
void TForm1::afficher(refchaine liste)
{
if (liste != NULL)
{
Memo1->Lines->Add(liste->nom) ;
afficher(liste->fils) ;
}
}
void TForm1::inserer(String nom, refchaine* noeud, refchaine* pere)
{
if (*noeud != NULL)
inserer(nom, &((*noeud)->fils), noeud) ;
else
{
(*noeud)->nom = nom ;
(*noeud)->pere = *pere ;
(*pere)->fils = *noeud ;
(*noeud)->fils = NULL ;
}
}
void TForm1::afficherImage(refchaine noeud)
{
String nom = noeud->nom ;
// Le format d'image supporté est uniquement le JPEG
TJPEGImage *jpg = new TJPEGImage ;
jpg->LoadFromFile(cheminDesImages + nom) ;
int largeurImage = Screen->Width / 2 ;
int hauteurImage = Screen->Height / 2 ;
// subterfuge pour remplir complétement la zone de l'image si le fichier source a des dimensions plus petites
int largeurRectangle = (largeurImage > jpg->Width) ? largeurImage : jpg->Width ;
int hauteurRectangle = (hauteurImage > jpg->Height) ? largeurImage : jpg->Height ;
TRect *rect = new TRect(0,0,largeurRectangle, hauteurRectangle) ;
Image1->Width = largeurImage ;
Image1->Height = hauteurImage ;
Image1->Canvas->StretchDraw(*rect, jpg) ;
}
Conclusion :
Le programme n'affiche que des images Jpeg.
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.