xilebo noone | c pas ce que j ai voulu dire ... evidemment on peut lire des BMP sur mac avec un logiciel type photoshop... mais dans le kit de developpement standard de Apple je doute qu il y ait de quoi ouvrir des images BMP .... car je suppose que c est dans on code qu il y a des erreurs notamment au niveau du chargement des jpg (car ailleurs je vois pas , mon code est quasi vierge).
Je viens de reessayer mon programme en ayant modifié au maximum le code
Code :
- Handle hData = nil;
- ImageDataPtr pImage;
- if (hCurrentImage) {
- HLock(hCurrentImage);
- pImage = (ImageDataPtr) *hCurrentImage;
- if (pImage != NULL) {
- hData = pImage->hNext;
- int w,h;
- m_offPtr;
- m_offPtr = LoadImageFromJpeg(pImage->name, w, h);
- ImageDataPtr(*hCurrentImage)->width = w;
- ImageDataPtr(*hCurrentImage)->height = h;
- MoveWindow(mainPtr,(X - pImage->width)/2,(Y - pImage->height)/2,true);
- SizeWindow(mainPtr, pImage->width, pImage->height, true);
- if (m_offPtr && mainPtr) {
- PixMapHandle pix = GetGWorldPixMap(m_offPtr);
- LockPixels(pix);
- Rect rect;
- //GrafPtr pOldPort;
- //GetPort(&pOldPort);
- SetRect(&rect, 0, 0,/* pImage->width*/w,/* pImage->height*/h);
- CopyBits((BitMap *)*pix/*& ( (GrafPtr) m_offPtr)->portBits*/, & ( (GrafPtr) mainPtr)->portBits, &rect, &rect, srcCopy, nil);
- //SetPort(pOldPort);
- UnlockPixels(pix);
- }
- } // FIN pImage != NULL
- HUnlock(hCurrentImage);
- }
- hCurrentImage = hData ? hData : hImages;
- Microseconds(&prevTime);
|
m_offPtr est de type CGrafPtr
et ImageDataPtr est une liste chainee contenant juste les noms des fichiers (a l o rigine liste chainee des images mais prend trop de place en memoire)
Donc il y a un timer : a chaque appel du timer ,il appelle la fonction nextimage (la fonction que je viens de donner)
celle ci fait dans l ordre :
passer a l element suivant de la liste (element courant = pImage)
Libere m_offPtr s il existe
charge la prochaine image dans m_offPtr (avec loadimagefromjpg)
Copie l image en memoire avec un copybits...
Resultat : si je ne fais pas le DisposeGworld, ca marche jusqu a temps qu il n y ait plus de memoire (normal je ne libere pas et j ecrase le pointeur).
Si je fais le DisposeGWorld, il m'affiche n importe quoi , de temps en temps une image correcte, sinon une image decalée mais pas celle qui devrait correspondre a l index (apparemment pb de pointage de memoire)
Ai je fais une erreur dans mon code ? ou alors je libere trop tot la memoire ? (c ce qu on m a dit)
|