Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API graphiques Discussion :

Comment afficher une image bitmap ?


Sujet :

API graphiques

  1. #1
    Membre régulier
    Comment afficher une image bitmap ?
    Bonjour,

    Comment afficher une image Bitmap sur DirectDraw ?
    Car ca ne marche pas , je vois une image noir.

    Je vous joint mon code source.

    J'ai même essayer et ca ne marche pas :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
     
    bool CopySxyToSxy(int xsrc, int ysrc, int x1src, int y1src, DWORD xdest, DWORD ydest,
     
    	LPDIRECTDRAWSURFACE lpDDSSource, // source surface
     
    	LPDIRECTDRAWSURFACE lpDDSDest    // destination surface
     
    )
     
    {
     
    	// Je n'utilise pas bltfast !!!
     
    	HRESULT hr;	// Valeur retounée par DirectX
     
     
     
    	RECT     rcSource, rcDest;
     
    	DDBLTFX  ddbltfx;
     
     
     
    	ZeroMemory(&ddbltfx, sizeof(ddbltfx));
     
    	ddbltfx.dwSize = sizeof(ddbltfx);
     
    	ddbltfx.dwDDFX = NULL; //DDBLTFX_MIRRORLEFTRIGHT;
     
     
     
    	rcSource.top = ysrc;
     
    	rcSource.left = xsrc;
     
    	rcSource.bottom = y1src;
     
    	rcSource.right = x1src;
     
    	rcDest.top = ydest;
     
    	rcDest.left = xdest;
     
    	rcDest.bottom = ydest + (y1src - ysrc);
     
    	rcDest.right = xdest + (x1src - xsrc);
     
     
     
    	hr = lpDDSDest->Blt(&rcDest,
     
    		lpDDSSource,
     
    		&rcSource,
     
    		DDBLT_KEYSRCOVERRIDE | DDBLT_WAIT /*| DDBLT_DDFX Effet miroir de gauche à droite */,
     
    		&ddbltfx);
     
     
     
    	/*if (DDCtrlDD(hr, "CopySxyToSxy: Echec de Blt"))
     
    		return false;*/
     
    	return true;
     
    }
     
     
    void HeartBeat()
    {
    	// Check for lost surfaces
    	CheckSurfaces();
     
    	// Clear the back buffer
    	DDClear( g_pDDSBack, 0, 0, w, h );
     
     
     
    	IDirectDrawSurface *gd = (IDirectDrawSurface*)HSURFACEDRAW;
     
     
    	if (gd->IsLost() != DD_OK)
    		gd->Restore();
     
    	CopySxyToSxy(0, 0, w, h, w, h, gd,g_pDDSBack);
     
     
     
    	// Blit the back buffer to the front buffer
    	DDFlip();
    }


    Merci beaucoup.

  2. #2
    Expert éminent sénior
    salut désolé de répondre tardivement d'une part les DDrawSurface ne sont pas initialisées il faudrait peut-être copier une image Bitmap sur ces DDrawSurfaces

    Ensuite Direct Draw ne fonctionne plus avec les versions récentes de Windows
    Si tu veux afficher des images sous Direct X le plus simple c'est d'utiliser D3DXSprite fourni par Direct3d9 ou au mieux des "quad vertices"
    La théorie, c'est quand on sait tout et que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
    ( A Einstein)