sebseb42
Messages postés495Date d'inscriptiondimanche 6 juillet 2003StatutMembreDernière intervention 9 novembre 2007
-
10 févr. 2004 à 22:15
samstart
Messages postés1Date d'inscriptionmercredi 22 novembre 2000StatutMembreDernière intervention10 août 2005
-
10 août 2005 à 12:59
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 ?
sebseb42
Messages postés495Date d'inscriptiondimanche 6 juillet 2003StatutMembreDernière intervention 9 novembre 20071 11 févr. 2004 à 14:56
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
samstart
Messages postés1Date d'inscriptionmercredi 22 novembre 2000StatutMembreDernière intervention10 août 2005 10 août 2005 à 12:59
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!!!