IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

MFC Discussion :

Problème CDC::BitBlt sous vista


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Par défaut Problème CDC::BitBlt sous vista
    Bonjour,

    Depuis la dernière mise à jour de Vista j'ai un soucis avec la fonction BitBlt.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pDC->BitBlt(PicRect.left,PicRect.top,PicRect.Width(),PicRect.Height(),&MemDcbb,0,0,SRCCOPY);
    Ce code qui fonctionne très bien en XP, qui fonctionnait très bien en Vista me fait maintenant un écran bleu
    Rencontrez-vous le même problème?

    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 502
    Par défaut
    Avez-vous vérifié la qualité des paramètres passés à la méthode BitBlt?

  3. #3
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    un mauvais paramétrage ne devrait pas provoquer un écran bleu .
    de quelle mise à jour vista parles-tu ?
    je pencherai plutôt pour un problème avec le driver de la carte graphique.
    celui-ci est-il signé MS ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Par défaut
    Salut,

    Bon je suspecte une mise à jour de Vista, mais bien évidemment comme ce n'est pas une fonctionnalité que je teste tous les jours j'ai bien du mal à rattacher ce problème à une mise à jour particulière.
    Ce que je peux dire:
    - Cette fonction n'a pas été modifiée depuis juillet 2007.
    - elle est utilisée pour le Print Preview sans problème.
    - elle fait un écran bleu sur deux machines Vista différentes lors de l'appel pour un Print.
    - le fait de l'encadrer par un try{}catch(...) ne me permet pas d'éviter l'écran bleu.
    - elle ne crash pas sous XP.
    - je l'ai remplacé par la fonction TransparentBlt() avec les même paramètres et cela ne crash pas, mais l'image n'apparait pas à l'impression, mais bien au print preview.
    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
    void CEnBitmap::DrawOnDC(CDC *pDC,CRect PicRect, bool bStretch/*=true*/, bool bTransparent/*=false*/)
    {
    	CBitmap BigBmp;
    	CDC MemDcbb,MemDc;
    	MemDc.CreateCompatibleDC(NULL);
    	CBitmap *pOldBmp = MemDc.SelectObject(this);
    	if (!pOldBmp) return;
     
    	BITMAP BM;
    	GetObject(sizeof(BM), &BM);			// Retrieve size of Bitmap
    	if (!bStretch)
    	{
    		PicRect.right = PicRect.left+BM.bmWidth;
    		PicRect.bottom = PicRect.top+BM.bmHeight;
    	}
    	//	StretchBlt is not suppoted by all device
    	//  Create a big Bitmap in memory, stretch the bitmap in this memory space 
    	//	and  use BitBlt to print this new Big bitmap
    	//
    	BigBmp.CreateCompatibleBitmap(pDC,PicRect.Width(),PicRect.Height());
    	MemDcbb.CreateCompatibleDC(NULL);
    	MemDcbb.SelectObject(&BigBmp);
    	MemDcbb.StretchBlt(0,0,PicRect.Width(),PicRect.Height(),&MemDc,0,0,BM.bmWidth,BM.bmHeight, SRCCOPY);
    	COLORREF cBck = RGB(255,255,255);
    	if(bTransparent)
    		cBck = GetPixel(0,0);
    	pDC->TransparentBlt(PicRect.left,PicRect.top,PicRect.Width(),PicRect.Height(),&MemDcbb,0,0,PicRect.Width(),PicRect.Height(),cBck);
    	//else
    	//{
    	//	//try{
    	//	//	pDC->BitBlt(PicRect.left,PicRect.top,PicRect.Width(),PicRect.Height(),&MemDcbb,0,0,SRCCOPY);
    	//	//}
    	//	//catch(...){};
    	//}
    }

  5. #5
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    par contre en voyant ton code ,une chose que j'ai constaté avec Vista c'est que GetPixel rame énormément au point de ne plus pouvoir l'utiliser.
    je vais voir si j'ai une portion de code avec bitblt que je pourrai tester avec vista.

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 502
    Par défaut
    J'ai assisté à une conférence sur DirectX10 et le message principale était que cette version faisait beaucoup moins de vérification sur les paramètres que les versions antérieurs et que s'était aux développer qu'incombé la responsabilité de faire un peu gaffe à leur appels.
    Vista utilise DirectX10 en interne au GDI DirectX10.

    Donc par simple déduction, un BSOD sur un bête BitBlt, moi je vérifierais les paramètres.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Par défaut
    Super, Merci,

    Pour ma part j'ai remplacé BitBlt par StretchBlt et cela fonctionne!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	pDC->StretchBlt(PicRect.left,PicRect.top,PicRect.Width(),PicRect.Height(),&MemDcbb,0,0,PicRect.Width(),PicRect.Height(), SRCCOPY);
    Malheureusement cette fonction n'est pas supportée par tous les devices (cfr.doc)

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Par défaut
    Citation Envoyé par farscape Voir le message
    salut,
    ...une chose que j'ai constaté avec Vista c'est que GetPixel rame énormément au point de ne plus pouvoir l'utiliser...
    As-tu une alternative au GetPixel pour obtenir la couleur d'un point?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème client DHCP sous Vista
    Par peter27x dans le forum Windows Vista
    Réponses: 2
    Dernier message: 23/11/2007, 09h58
  2. Problème avec Shellexecute sous Vista
    Par scara dans le forum Langage
    Réponses: 2
    Dernier message: 19/11/2007, 18h09
  3. [D6/XP] Problème de curseur sous Vista
    Par banban54 dans le forum EDI
    Réponses: 1
    Dernier message: 28/09/2007, 20h55
  4. problème de défragmentation sous Vista Ultimate
    Par !Jokeman! dans le forum Windows Vista
    Réponses: 5
    Dernier message: 02/06/2007, 17h51
  5. problème de connexion sous Vista
    Par nasser.h dans le forum Windows Vista
    Réponses: 1
    Dernier message: 16/02/2007, 08h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo