begin process at 2012 05 27 18:45:09
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > MONPPM : UN AFFICHEUR .PPM

MONPPM : UN AFFICHEUR .PPM


 Information sur la source

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Graphique Classé sous :API Windows, glisser-déposer, afficheur, images, ppm Niveau :Débutant Date de création :22/02/2010 Date de mise à jour :09/03/2010 17:30:03 Vu / téléchargé :2 721 / 105

Auteur : pgl10

Ecrire un message privé
Site perso
Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
J'ai un logiciel qui calcule en .ppm des images.
Il y a une information sur les formats ppm
(Portable Pixel Map) à :
http://netpbm.sourceforge.net/doc/ppm.html
- J'ai donc eu l'envie de faire un afficheur de
fichiers *.ppm qui soit très facile à installer
et utiliser. Je souhaitais éviter les installeurs
et les logiciels complexes qu'il faut étudier
longtemps avant de s'en servir.
- Pour cela, j'ai développé MonPPM qui affiche
des fichiers *.ppm ayant le magic number : P6
et 256 niveaux pour les valeurs RGB des pixels.
Ce qui est un type assez courant.
- Il y a plusieurs façons de désigner le fichier image
à afficher : Fichier => Ouvrir, <ctrl>O, la touche : N
et le glisser-déposer du fichier dans la fenêtre adapté de :
http://www.gametutorials.com/gtstore/pc-335-9-dra g-and-drop.aspx
- La touche F1 donne l'aide. Le source est commenté.
- La proportion largeur/hauteur de l'image est conservée
quand on modifie les dimensions de la fenêtre avec la souris,
et de même en cas d'utilisation du bouton : agrandir la fenêtre.
- Les tailles maximale et minimale de la fenêtre sont prises
en compte, y compris si l'image a plus de pixels que l'écran.
- Si on associe MonPPM et le type .ppm, on peut afficher l'image :
. soit par un glisser-déposer du fichier sur le nom de l'exécutable,
. soit par un double clic sur le nom du fichier.

Source

  • #include "main.h"
  • // variables communes :
  • char monprojet[] = "MonPPM v 0.7";
  • char nomModel[300]; // nom complet du fichier *.ppm à afficher
  • int larg; // largeur de l'image
  • int haut; // hauteur de l'image
  • int lsup=10; // supplément de largeur entre la fenêtre et l'image ( 2 marges )
  • int hsup=74; // supplément expérimental de hauteur entre la fenêtre et l'image
  • int hbet; // hauteur de barre d'état
  • UCHAR *ucpBitsMem; // les pixels BGRA de l'image
  • int cx,cy,xe,ye; // largeur et hauteur de la fenêtre et de l'écran
  • int prem; // prem : 1 pour le premier affichage et 0 ensuite
  • int zoom; // zoom : 1 ( éch. 1 ) ou 2 ( éch. 1/2 ) ou 4 ( éch. 1/4 )
  • int nmax; // nombre d'images qui se suivent en fenêtre maximisée
  • int faire; // variable d'état pour readPPM : -1, 0, 1 ou 2
  • char buf[600]; // un buffer de travail réutilisable
  • HINSTANCE hinst;
  • HWND hWnd,hEdit,hBe;
  • HDC hDC,hdcMem;
  • HBITMAP hBmpMem;
  • void rer(int n) {
  • char buf1[]="Problème n° ";
  • char buf2[]=" dans la lecture du fichier : \n\n";
  • char bb[3];
  • strcpy(buf,buf1); // on signale un problème
  • sprintf(bb,"%i",n); // intervenu dans readPPM
  • strcat(buf,bb); // pendant la lecture du fichier .ppm
  • strcat(buf,buf2);
  • strcat(buf,nomModel);
  • informer(buf);
  • faire = -1; // pour traiter l'erreur de lecture
  • return;
  • }
  • void readPPM(char *szFileName, UCHAR **ucpBits, int *iWidth, int *iHeight) {
  • FILE *fi;
  • unsigned int w, h, d; // ici on lit le fichier *.ppm de l'image
  • char *t,*ptr;
  • long fisize;
  • int r,n;
  • fi = fopen(szFileName, "r");
  • if ( fi == NULL ) {rer(1); return;}
  • t = fgets(buf, 100, fi);
  • if ( (t == NULL) || ( strncmp(buf, "P6", 2) != 0 ) ) {rer(2); return;}
  • if(buf[2] == '\n') {
  • t = fgets(buf, 100, fi); // cas général : P6\n
  • ptr=&buf[0];
  • }
  • else ptr=&buf[2]; // si le '\n' est omis
  • while(strncmp(ptr, "#", 1) == 0 ) { // si commentaires
  • t = fgets(buf, 100, fi);
  • ptr=&buf[0];
  • }
  • while(strncmp(ptr, "\n", 1) == 0 ) { // si ici : '\n'
  • t = fgets(buf, 100, fi);
  • ptr=&buf[0];
  • }
  • d = 0;
  • w = strtol(ptr, &ptr, 0);
  • h = strtol(ptr, &ptr, 0);
  • d = strtol(ptr, &ptr, 0); // lecture de d : nb de niveaux
  • if( d!= 255 ) {
  • t = fgets(buf, 100, fi);
  • d = strtol(buf, &ptr, 0); // si nécessaire, dans la ligne suivante
  • }
  • if ( d != 255 ) {rer(3); return;} // on se restreint à d = 255 !
  • n=3*w*h; // n : nombre d'octets pour les pixels en RGB
  • *ucpBits=(UCHAR *)malloc(n*sizeof(UCHAR)); // mémore des pixels en RGB
  • fseek(fi, 0, SEEK_END);
  • fisize = ftell(fi); // nombre total d'octets du fichier
  • fseek(fi, fisize-n, SEEK_SET); // on va lire les n derniers octets
  • r=fread(*ucpBits, sizeof(UCHAR), n, fi);
  • if(r == 0) {rer(4); return;}
  • fclose(fi);
  • *iWidth=(int)w; // largeur et
  • *iHeight=(int)h; // hauteur de l'image
  • return;
  • }
  • void newModel() { // à chaque fois que l'on souhaite charger une nouvelle image
  • UCHAR *pix=0;
  • int i,j;
  • if( openModel() ) {
  • DeleteObject(hBmpMem);
  • ReleaseDC(hWnd,hdcMem);
  • free(ucpBitsMem);
  • ucpBitsMem = 0;
  • readPPM(nomModel, &pix, &larg, &haut);
  • if(faire == -1) {
  • free(pix);
  • pix = 0;
  • newModel(); // ça c'est osé ! mais ici ça marche !
  • return;
  • }
  • ucpBitsMem = (UCHAR*)malloc(4*larg*haut);
  • for(i=0,j=0;i<larg*haut*3;i+=3,j+=4) {
  • ucpBitsMem[j]=pix[i+2];
  • ucpBitsMem[j+1]=pix[i+1]; // rangement des données dans une
  • ucpBitsMem[j+2]=pix[i]; // bonne structure : W*H*4 ( B G R A )
  • ucpBitsMem[j+3]=(UCHAR)0;
  • }
  • free(pix);
  • pix = 0;
  • hdcMem = CreateCompatibleDC(NULL); // création d'un bitmap
  • hBmpMem = CreateBitmap(larg,haut,1,32,ucpBitsMem);
  • SelectObject(hdcMem,hBmpMem);
  • if(prem != 0) {
  • prem = 0; // ici on prépare le cas particulier du
  • i = mini(lmax(),lsup+larg/zoom); // premier affichage de la première image
  • j = mini(hmax(),hsup+haut/zoom);
  • SetWindowPos(hWnd,0,0,0,i,j,SWP_NOZORDER|SWP_NOMOVE);
  • }
  • else SetWindowPos(hWnd,0,0,0,lsup+larg/zoom,hsup+haut/zoom,SWP_NOZORDER|SWP_NOMOVE);
  • guidage();
  • model();
  • faire=2; // ici la préparation de l'image s'est bien terminée
  • }
  • InvalidateRect(hWnd, NULL, TRUE);
  • return;
  • }
  • //
  • // Pour le reste du source voir dans le zip
  • //
#include "main.h"

// variables communes :

char monprojet[] = "MonPPM v 0.7";
char nomModel[300]; // nom complet du fichier *.ppm à afficher
int larg;           // largeur de l'image
int haut;           // hauteur de l'image
int lsup=10;        // supplément de largeur entre la fenêtre et l'image ( 2 marges )
int hsup=74;        // supplément expérimental de hauteur entre la fenêtre et l'image
int hbet;           // hauteur de barre d'état
UCHAR *ucpBitsMem;  // les pixels BGRA de l'image
int cx,cy,xe,ye;    // largeur et hauteur de la fenêtre et de l'écran
int prem;           // prem : 1 pour le premier affichage et 0 ensuite
int zoom;           // zoom : 1 ( éch. 1 ) ou 2 ( éch. 1/2 ) ou 4 ( éch. 1/4 )
int nmax;           // nombre d'images qui se suivent en fenêtre maximisée
int faire;          // variable d'état pour readPPM : -1, 0, 1 ou 2 
char buf[600];      // un buffer de travail réutilisable

HINSTANCE hinst;
HWND hWnd,hEdit,hBe;
HDC hDC,hdcMem;
HBITMAP hBmpMem;

void rer(int n) {
char buf1[]="Problème n° ";
char buf2[]=" dans la lecture du fichier : \n\n";
char bb[3];
     strcpy(buf,buf1);      // on signale un problème 
     sprintf(bb,"%i",n);    // intervenu dans readPPM 
     strcat(buf,bb);        // pendant la lecture du fichier .ppm
     strcat(buf,buf2);      
     strcat(buf,nomModel);
     informer(buf);
     faire = -1;            // pour traiter l'erreur de lecture
     return;
}

void readPPM(char *szFileName, UCHAR **ucpBits, int *iWidth, int *iHeight) {
FILE *fi;          
unsigned int w, h, d;          // ici on lit le fichier *.ppm de l'image 
char *t,*ptr;
long fisize;
int r,n;
     fi = fopen(szFileName, "r");
     if ( fi == NULL ) {rer(1); return;}
     t = fgets(buf, 100, fi);
     if ( (t == NULL) || ( strncmp(buf, "P6", 2) != 0 ) ) {rer(2); return;}
     if(buf[2] == '\n') {
          t = fgets(buf, 100, fi);  // cas général : P6\n
          ptr=&buf[0];
     }
     else ptr=&buf[2];                     // si le '\n' est omis
     while(strncmp(ptr, "#", 1) == 0 ) {   // si commentaires
          t = fgets(buf, 100, fi);
          ptr=&buf[0];
     }
     while(strncmp(ptr, "\n", 1) == 0 ) {  // si ici : '\n' 
          t = fgets(buf, 100, fi);
          ptr=&buf[0];
     }
     d = 0;
     w = strtol(ptr, &ptr, 0);
     h = strtol(ptr, &ptr, 0);
     d = strtol(ptr, &ptr, 0);               // lecture de d : nb de niveaux
     if( d!= 255 ) {                
          t = fgets(buf, 100, fi);
          d = strtol(buf, &ptr, 0); //  si nécessaire, dans la ligne suivante
     }
     if ( d != 255 ) {rer(3); return;}         // on se restreint à d = 255 !
     n=3*w*h;                  //  n : nombre d'octets pour les pixels en RGB
     *ucpBits=(UCHAR *)malloc(n*sizeof(UCHAR));   // mémore des pixels en RGB
     fseek(fi, 0, SEEK_END);
     fisize = ftell(fi);                  // nombre total d'octets du fichier 
     fseek(fi, fisize-n, SEEK_SET);       // on va lire les n derniers octets
     r=fread(*ucpBits, sizeof(UCHAR), n, fi);
     if(r == 0) {rer(4); return;} 
     fclose(fi); 
     *iWidth=(int)w;   // largeur et
     *iHeight=(int)h;  // hauteur de l'image
     return;
}

void newModel() {   // à chaque fois que l'on souhaite charger une nouvelle image
UCHAR *pix=0;
int i,j;  
     if( openModel() ) {	
          DeleteObject(hBmpMem);
          ReleaseDC(hWnd,hdcMem);
          free(ucpBitsMem);
          ucpBitsMem = 0;
          readPPM(nomModel, &pix, &larg, &haut);
          if(faire == -1) { 
               free(pix);
               pix = 0;
               newModel();    // ça c'est osé ! mais ici ça marche !
               return;
          }
          ucpBitsMem = (UCHAR*)malloc(4*larg*haut);
          for(i=0,j=0;i<larg*haut*3;i+=3,j+=4) {
               ucpBitsMem[j]=pix[i+2];     
               ucpBitsMem[j+1]=pix[i+1];   // rangement des données dans une
               ucpBitsMem[j+2]=pix[i];     // bonne structure : W*H*4 ( B G R A )
               ucpBitsMem[j+3]=(UCHAR)0;              
          }
          free(pix);
          pix = 0;
          hdcMem = CreateCompatibleDC(NULL);    // création d'un bitmap 
          hBmpMem = CreateBitmap(larg,haut,1,32,ucpBitsMem);
          SelectObject(hdcMem,hBmpMem);
          if(prem != 0) { 
               prem = 0;                          // ici on prépare le cas particulier du
               i = mini(lmax(),lsup+larg/zoom);   // premier affichage de la première image
               j = mini(hmax(),hsup+haut/zoom);
               SetWindowPos(hWnd,0,0,0,i,j,SWP_NOZORDER|SWP_NOMOVE);
          }
          else SetWindowPos(hWnd,0,0,0,lsup+larg/zoom,hsup+haut/zoom,SWP_NOZORDER|SWP_NOMOVE);
          guidage();
          model();
          faire=2;   // ici la préparation de l'image s'est bien terminée
	}
      InvalidateRect(hWnd, NULL, TRUE);
	return;
}



//
//  Pour le reste du source voir dans le zip
//

 Conclusion

On peut bien sûr l'étendre à d'autres types de fichiers d'images et/ou
développer des fonctionalités supplémentaires, ce n'était pas l'objectif
et de toutes façons, l'excellent et gratuit PhotoFiltre est bien mieux.
Toutes vos remarques sont les bienvenues. pgl10.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

22 février 2010 09:28:37 :
correction de laprésentation
23 février 2010 17:56:38 :
Version 0.3 nouvelle ( voir ci-après )
27 février 2010 13:12:09 :
La v0.4 est encore mieux ( voir ci-après )
27 février 2010 19:08:23 :
La description avait une erreur.
28 février 2010 16:53:42 :
La v0.5 ajoute le traitement de l'association des *.ppm
02 mars 2010 13:16:51 :
La version 0.6 supprime le scintillement ( voir ci-après)
09 mars 2010 17:30:04 :
Version 0.7 : plusieurs améliorations ( voir ci-après )

 Sources du même auteur

Source avec Zip Source avec une capture UNE LISTE HÉTÉROGÈNE DOUBLEMENT CHAINÉE
Source avec Zip Source avec une capture POUR AFFICHER LES CARACTÈRES ACCENTUÉS SOUS WINDOWS EN MODE ...
Source avec Zip Source avec une capture CONVHTML : UN UTILITAIRE DE CONVERSION POUR FICHIERS HTML
Source avec Zip Source avec une capture AFFIMOFF : UNE VISIONNEUSE 3D AVEC PARAMÉTRISATION ET TEXTUR...
Source avec Zip Source avec une capture CRIBLE D'ERATOSTHÈNE OPTIMISÉ

 Sources de la même categorie

Source avec Zip Source avec une capture PLANNING D'EQUIPE par grephit
Source avec Zip APPLICATION DE DESSIN DE QUELQUES FIGURES par laguchori
Source avec Zip Source avec une capture HDR EXPOSURE FUSION par mecrosoft
Source avec Zip Source avec une capture IRC CLIENT MULTISERVEUR EN MFC (TXIRC) par TeniX
Source avec Zip ENTETE DU FICHIER BMP (BIPMAP) par k.Lutchi

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture AFFIMOFF : UNE VISIONNEUSE 3D AVEC PARAMÉTRISATION ET TEXTUR... par pgl10
Source avec Zip Source avec une capture CALCUL D'UNE RACINE NUMÉRIQUE par pgl10
Source avec Zip Source avec une capture C++ FORMAT D'IMAGE AVEC QT par pop70
Source avec Zip Source avec une capture [WIN32] EASY WAVE MIXER par ordiman85
Source avec Zip Source avec une capture QUELQUES EXEMPLES D'UTILIISATION DES THREADS par goodboy21

Commentaires et avis

Commentaire de Pistol_Pete le 22/02/2010 10:56:45

Salut
J'ai quelques remarques:

- Tu fais, grosso modo, Largeur * Hauteur fread + le même nombre de fseek, donc tu as Largeur * Hauteur accès disques !
Il faudrait mieux que tu lises ton fichier en une unique fois puis que tu travailles ensuite sur ton buffer, tu gagnerais grandement en performance.
- J'aurai aimer voir une fonction que ce charge uniquement de l'ouverture de l'image ici tu fait en plus :
#  SetWindowPos(hWnd,0,0,0,larg/zoom,74+haut/zoom,SWP_NOZORDER|SWP_NOMOVE);
# guidage();
# paint=2; // le premier affichage du fichier image est terminé

- Les fonctions SetPixelxxx; sont très lente puisqu'elles font autant d'appel qu'il y a de pixel dans l'image.
Il faudrait que le prototype de ta fonction soit :
ReadPPM(char *szFileName, UCHAR *ucpBits,int *iWidth,int *iHeight)
avec szFileName le nom de ton fichier,
ucpBits un pointeur que tu alloueras quand tu connaitras le nombre de pixels dans ton image et W, H le nombre de pixel de ton image.

Voila, j'espère que ses quelques remarques te permettront d'avancer.
Regarde ici (http://ImAnalyse.free.fr) si tu veux un code fonctionnel en traitement de l'image.

A+

Commentaire de pgl10 le 22/02/2010 11:16:46

Merci Pistol_Pete. Je vais suivre tes conseils.
Et j'imagine que d'autres remarques seraient utiles,même
si mon intention est de conserver un logiciel très simple.
A plus tard pour une future nouvelle version. pgl10

Commentaire de Pistol_Pete le 22/02/2010 14:14:42

Je viens de regarder l'ensemble du code et il y a quelques erreurs de conceptions:

1)Pour le message WM_SIZING: (ici je bloque la taille de la fenêtre à 290 par 530px)
case WM_SIZING :
  RECT *prc;
  prc= (RECT*) lParam;
  if(prc->right-prc->left!=290)
    if(wParam==WMSZ_BOTTOMRIGHT || wParam==WMSZ_RIGHT|| wParam==WMSZ_TOPRIGHT)
      prc->right=prc->left+290;
    else
      prc->left=prc->right-290;

   if(prc->bottom-prc->top!=530)
     if(wParam==WMSZ_BOTTOMRIGHT || wParam==WMSZ_BOTTOM || wParam==WMSZ_BOTTOMLEFT)
        prc->bottom=prc->top+530;
   else
      prc->top=prc->bottom-530;
   break;

2) Gros soucis avec le WM_PAINT:
Quand un message WM_PAINT est appelé, on n'a pas le droit de le breaker en cours de route comme tu le fais quand il n'y a pas d'image à charger. Si tu le break, la fenêtre ne peut pas valider son rafraichissement et un nouveau message WM_PAINT sera tout de suite envoyé. Il faut faire quelque chose de la sorte :
# PAINTSTRUCT ps;
# hDC = BeginPaint( hWind , &ps );
# if(paint != 0)
#   paintModel();
# EndPaint( hWind , &ps );

3) Ta pompe à message n'est pas optimisé :
PeekMessage() n'attend pas qu'il y ai un message dans la file d'attente, donc il ne laisse pas la possibilité à d'autre prog de tourner. Regarde dans le gestionnaire des tache, ton processus doit prendre 100% de l'UC même quand tu ne fais rien...

while (GetMessage(&msg, NULL, 0, 0))
{
  TranslateMessage(&msg);
  DispatchMessage(&msg);
}


4) L'erreur la plus importante : A chaque fois que tu reçois un WM_PAINT, tu recharges l'image! Il faut savoir qu'il y a beaucoup de WM_PAINT qui son envoyé à la fenêtre...
Il faut que tu charges (une unique fois) l'image dans un buffer et que tu l'affiches via un BltBit().
Regarde cette source qui propose une classe CImage minimale pour charger et afficher une image en win32
http://www.cppfrance.com/codes/TRAITEMENT-IMAGE-FILTRE-MEDIAN-TEMPS-CONSTANT_49471.aspx
A+


Commentaire de Pistol_Pete le 22/02/2010 14:16:56

Pour la programmation Windows, deux livres incontournables : Richter et Petzold
http://www.brunews.com/brunews/index.htm

CP5 et JR5

A+

Commentaire de pgl10 le 23/02/2010 18:04:44

Voici donc la version 0.3 de MonPPM. Ceci implémente, je crois, tous les conseils très judicieux de Pistol_Pete. Il en résulte une présentation du source et des performances bien meilleures et une charge CPU beaucoup plus faible. Mon objectif d'afficher efficacement les images calculées que j'obtiens par ailleurs est complètement atteint. Merci beaucoup à Pistol_Pete pour son aide. pgl10

Commentaire de Pistol_Pete le 24/02/2010 10:05:15

Quelle réactivité ! Merci

Effectivement c'est déjà beaucoup beaucoup mieux.
Quelques piste d'amélioration tout de même:
-Créer des raccourcis clavier au lieu de traiter le msg WM_KEYDOWN et GetAsyncKeyState(VK_CONTROL))

-Ne pas créer une image vide lorsque l'action d'ouverture est annulée. (Laissé le prog redessiner le fond de la fenêtre par dessus)

-Gérer le BitBlt ou leStretchBlt
A+

Commentaire de pgl10 le 27/02/2010 13:16:09

Dans la version 0.4 on a implémenté le StretchBlt grâce au soutien de Pistol_Pete.
Merci à lui. Et cela va encore beaucoup plus vite ! Il existe une assez grande
variété de fichiers *.ppm et pour cela on a reprogrammé la lecture du fichier image.
On a mis un zoom à 3 niveaux et on peut redimensionner de la fenêtre. pgl10

Commentaire de Pistol_Pete le 01/03/2010 09:16:01 9/10

Salut
Bravo pour toutes les modifications apportées! Je n'ai pas eu un seul échec lors de l'ouverture de mes fichiers ppm!
Ce programme est simple rapide et fonctionnelle!  
Dernier petite chose et c'est un détail: regarde le message WM_ERASEBKGND: il te permettra d'éviter le scintillement de la fenêtre quand tu la redimensionnes.  

Commentaire de pgl10 le 02/03/2010 13:22:15

Avec la version 0.6 quand l'utilisateur redimensionne la fenêtre avec la souris le scintillement n'apparaît plus. pgl10

Commentaire de pgl10 le 09/03/2010 17:32:20

La v 0.7 corrige quelques cas paticuliers dont les fenêtres maximisées. Et on a
amélioré le source. Merci à Pistol_Pete pour ses conseils et ses encouragements.
NOTA : http://www.hlevkin.com/TestImages/moon.ppm a 11 Mo et 1986 x 1986 pixels.
Et la photo de Lena Söderberg (née Sjööblom) est parue dans Playboy en nov 1972.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

OpenGl:Prob de textures PPM [ par Florian29 ] Salut!Voilà j'ai un problème avec les images ppm pour mes programmes openGl. J'ai développé des programme à la fac qui utilisent des textures ppm. Che animer des images JPG [ par popi0016 ] Posté le: Jeu Oct 21, 2004 0:56 Sujet du message: Animer des images JPG ----------------------------------------------------------------------- superposer des images en opengl/glut [ par gimli123 ] Bonjour, est-il possible de superposer de .tga ?Et au faite, en passant, comment doit-on faire pour que les images bouges en translation ? si oui comm liste d'images [ par maigmoc ] salut;j'aimerai créer une liste d'images et ensuite prendre des images(jpeg) d'un repertoire et les mémorisé dans cette liste.merci a+ Urgent manipulation d'images et text [ par bilal ] salut,voila je suis sur un projet que je dois absolument terminer au plus vide mais g un obstacle , je travail sur c++ builderet je voudrai savoir co comparaison images [ par maigmoc ] salut à tous;je cherche à faire une comparaison entre 2 images pixels par pixels dans l'objectif de détecter des mouvements.je travail en visual c++ m exploitation d'image issues de 2 webcams [ par sofbboy ] Bonjour a tous.Je débute un peu dans le traitement video en C++ et j'ai un petit probleme...Je voudrais récupérer les images de 2 webcams pour ensuite Creer une ressource avec Borland builder6 [ par popi0016 ] Bonjours je voudrais associer a mon .exe des images (bmp ou jpeg) et aimerai savoir comment creer une ressource avec toutes mes images (60 environs) s Ecran ne rafraichi pas les images [ par smilandfly ] BonjourJe devellope un demineur sous mfc.J'utilise des BitmapButton qui sont créés dynamiquements.Losrque que l'on clik sur un, il doit changer l'imag toolbar avec des images [ par sajid_morad ] salut , j aimerai bien savoir comment charger ma toolbar avec des images bmp, Merci


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,842 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales