begin process at 2012 05 28 17:24:59
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

API

 > 

BitBlt / StretchDIBits ??


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

BitBlt / StretchDIBits ??

mardi 10 février 2004 à 22:15:59 | BitBlt / StretchDIBits ??

sebseb42

salut a tous

voila, j'ai besoin de blitter des données graphique a l'ecran, et ce de maniere tres tres rapide car c'est une operation que je fait extremement souvent dans mon programme

pour l'heure, j'utilise StretchDIBits, qui gere l'etirement mais qui ne me sert strictement a rien, du moins ca ne me sert a rien si je peux peux faire plus rapide sans etirement

j'imagine que la gestion du redimensionnement doit prendre pas mal de ressource, et donc je voudrais echanger contre un BitBlt, pour tester, seulement je vous explique pourquoi j'ai choisi StretchDIBits, c'est tres simple :

void FAR PASCAL
StretchDIB(
LPBITMAPINFOHEADER biDst,
LPVOID lpvDst,
int DstX,
int DstY,
int DstXE,
int DstYE,
LPBITMAPINFOHEADER biSrc,
LPVOID lpvSrc, // <----- BUFFER DIRECTE
int SrcX,
int SrcY,
int SrcXE,
int SrcYE
)

en gros la fonction me permet de blitter directement un buffer contenant des données de couleur (pixels), voila pourquoi je l'utilise, c'est super simple

maintenant voyons BitBlt :

BOOL BitBlt(
HDC hdcDest, // handle to destination DC
int nXDest, // x-coord of destination upper-left corner
int nYDest, // y-coord of destination upper-left corner
int nWidth, // width of destination rectangle
int nHeight, // height of destination rectangle
HDC hdcSrc, // handle to source DC
int nXSrc, // x-coordinate of source upper-left corner
int nYSrc, // y-coordinate of source upper-left corner
DWORD dwRop // raster operation code
);

mon probleme ce situe ici :

HDC hdcSrc, // handle to source DC

comment passer d'un buffer int* a un HDC, de maniere tres rapide ?

merci d'avance pour votre aide =)
a++
mercredi 11 février 2004 à 12:04:44 | Re : BitBlt / StretchDIBits ??

ymca2003

- d'abord au début du prog, tu crée un DC et un bitmap en memoire compatbible avec l'écran:

// cx et cy : taille image

HDC hdc = GetDC(NULL);
HDC hMemDC = CreateCompatibleDC(hdc);
HBITMAP hMemBmp = CreateCompatibleBitmap(hdc, cx, cy);
HBITMAP hOldBmp = (HBITMAP) SelectObject(hMemDC, hMemBmp);
ReleaseDC(NULL, hdc);

- tu init ce DC avec ton DIB en utilsant StretchDIDBits


- quand tu doit dessiner, utilise hMemDC avec BitBlt.

- enfin à la fin du prog tu libère les ressources :
SelectObject(hMemDC, hOldBmp);
DeleteObject(hMemBmp);
DeleteDC(hMemDC);

Cependant c'est pas sur que bitblt soit plus rapide (la fonction StretchDIBits doit être optimisée quand il n'y a pas de mise à l'échelle).
mercredi 11 février 2004 à 14:56:49 | Re : BitBlt / StretchDIBits ??

sebseb42

alors en gros, si je dois init mon DC avec StretchDIBits, ca reviend a n'utiliser que StretchDIBits... j'ai dit que j'affichais mon image plein de fois, mais je le fait pas par plaisir, si je le fait, c'est parceque mon image est modifier en temps-reel

donc si a chaques fois je dois faire tout les trucs bizar que tu fait =) + un StretchDIBits, autant ne faire que le StretchDIBits

sinon pour l'opti, je pense aussi, sur une fenetre en 400 x 400 x 32 je suis a 195 fps, et dans que je redimensionne, je chute a 130 fps, meme si je redimensionne en plus petit que l'original
mercredi 10 août 2005 à 12:59:30 | Re : BitBlt / StretchDIBits ??

samstart

Salut à tout le monde , et un grand merci pour les gens de ce site ;

Je ss débutant en vc++6;
mon problème c est :
  j 'ai chargé un fichier.bmp dans un tableau bitmap[taile_de_bitmap] à l aide de ce code:
 
 
 FILE* ptr;
 const int taille_de_bitmap= 405875;
 char bitmap[taile_de_bitmap];

 if ((ptr=fopen("c:\fichier.bmp","rb"))==NULL)
 {
  .......
  
 }else{
 
  int buf[2];
  for(int i=0;!feof(ptr);i++) // boucler jusqu à la la fin du fichier.bmp
  {
   fseek(ptr,i,SEEK_SET);
   fread(buf,sizeof(int),1,ptr);
   bitmap[i]=buf[0]; //remplir bitmap[] 

  }
  
  je chreche du code utilisant les API win32 (StretchDIBIts() , BitBlt() )  dans WM_PAINT afin d afficher bitmap[]; car j arrive pas à comprendr comment ça marche ces deux fonctions!!!
  
  // et *********MERCI d avance ********
  



Cette discussion est classée dans : int, destination, of, bitblt, stretchdibits


Répondre à ce message

Sujets en rapport avec ce message

probleme SKD [ par Arnaud16022 ] helloje suis sur VC6 et je voudrais charger des modeles md2 sous openGL. que faire? Évidemment un petit tour chez Digiben!! (bon je sais qu'il existe passer de HICON en HBITMAP, pour menu [ par youpiyoyo ] j'aurai besoin de passer un HICON en HBITMAP, pour pouvoir afficher une icone dans un menu j'ai testé avec copyimage sans succes.....voici le bout de pb avec fonctions sqrt de math.h [ par fox88 ] voici mon code : void histod::calcul_moyenne_ecartype(){ //CALCUL MOYENNE DU NB D'APPELS MOYEN JOURNALIER unsigned long accu=0; int moyenne=0;<br C++ switch [ par blastmanu ] Bonjour tt le monde!Et oui j'ai encore une question je voudrais savoir si il est possible de declarer une variable a l'interieur d'une boucle switchpa affichier un int dans une edit box (win32) [ par maevasa ] tout est dans le titre! Je galères j'ai essayé tout ce que j'ai pu trouver mais ça ne marche pas!int i=12;SendDlgItemMessage(hdlg, IDC_COUNT, WM_SETTE problème avec LogonUser [ par Corwin01 ] Voila je ne sais plus comment faire , ca fait une matinée complète que je perd je n'arrive pas à lancer un exe sous un profile different , aidez moi s classe [ par ToToL ] Bonjour j'ai un eptit souci de classe. tout d'abor voici mon code source :#include #include #include int InitSDL( void );void Analise( void );int Draw BitBlt me fait chier [ par vecchio56 ] J'ai crée un projet par défaut avec vs.Les seuls trucs que j'ai fait sont créer un HDC hdc2 en variable globale, et dans le WM_PAINT j'ai mis:case WM_ [C++] Problème en POO [ par Tijee ] Bonjour à tous.Voila, j'ai fait un petit moteur 2D avec SDL compilé avec Dev-Cpp, il est simple mais fonctionne très bien. J'aimerais parvenir au même les Argument Du main() !!! [ par WaFFel ] bha expliquon mon problem !int main(int nArg,char* cArgs[]){ // ..... plein de ligne de code ...... }bha vous voyer ses une declaration d'un main d


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,905 sec (4)

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