Filtre Directshow Overlay Text avec alpha [Résolu]

Signaler
Messages postés
4
Date d'inscription
vendredi 23 février 2007
Statut
Membre
Dernière intervention
15 mai 2007
-
Messages postés
1
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
26 juin 2009
-
Bonjour,

Je travaille actuellement sur la realisation d'un filtre Directshow utilisant GDI+. j'arrive, grace aux classes de GDI+ a ecrire sur la video lorsque je la lis dans une application externe (codee par moi-meme, qui crée le graph DirectShow et connecte les filtres). Mon probleme est que lorsque j'insere mon filtre dans un graph manuellement, mon texte n'apparait pas sur la video, qui elle se joue normalement.

Quelqu'un pourrait-il m'aider ?

Je mets ici une portion de mon code si jamais vous avez des remarques :

    HBITMAP lDibSection = CreateDIBSection(NULL, (BITMAPINFO*) &pVI->bmiHeader,
                                    DIB_RGB_COLORS, &lpDibBits, NULL, 0);

    HDC lDC;
   
    lDC = CreateCompatibleDC(NULL);
    m_OldObject = SelectObject( lDC, lDibSection );

    BYTE *pBuffer;
    pSample->GetPointer( pBuffer );
    RGBQUAD * pBuffer2 = (RGBQUAD*) pBuffer;

    memcpy( lpDibBits, pBuffer, lWidth * lHeight * 4 );

   WCHAR string[] = L"Hello World";
    long lfHeight =    12 * LOGPIXELSY / 72 + 4;
    Graphics gr(lDC);
   
    // Preparing Font //
    PointF        pointF(0, lHeight - lfHeight);
    FontFamily    fontFamily(L"Arial");
    Font        font(&fontFamily, 12, FontStyleItalic, UnitPoint);
    SolidBrush    fontColor(Color(255, 255, 255, 255));
   
    // Preparing rectangle //
    RectF        rectF(0, lHeight - lfHeight, lWidth, lfHeight);
    Pen            pen(Color(0, 0, 0, 0));
    SolidBrush    rectBackground(Color(128, 255, 0, 0));
    gr.FillRectangle(&rectBackground, rectF);

    // Draw Text on Background Rectangle //
    gr.DrawRectangle(&pen, rectF);
    gr.DrawString(string, -1, &font, pointF, NULL, &fontColor);
    gr.get
    gr.ReleaseHDC(lDC);
   
    // Copy our modified bitmap into the original sample buffer
    memcpy( pBuffer, lpDibBits, lWidth * lHeight * 4 );
   
    DeleteDC(lDC);
    DeleteObject(lDibSection);

Je précise donc que, utilise dans une appli, ce filtre affiche un bandeau rouge au bas de l'image, dans lequel on peut lire "Hello World". Malheureusement, en dehors, il ne fait rien, ce qui est dommage car j'aimerais bien realiser de petits effets sympa

3 réponses

Messages postés
4
Date d'inscription
vendredi 23 février 2007
Statut
Membre
Dernière intervention
15 mai 2007

Desolé, erreur classique, j'avais oublié de charger la GDI (shame )

Ben pour ceux que ca interesse, le code ci-dessus fonctionne...
Messages postés
2
Date d'inscription
jeudi 5 juin 2003
Statut
Membre
Dernière intervention
22 mai 2007

En fait ce qui m'interresse terriblement, c'est ton filtre :)
Cordialement
Crealinks
Messages postés
1
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
26 juin 2009

Salut Alexv4x,

Peux tu m'envoyer s'il te plait ton code..je suis sur un projet, ou je dois superposer une image  sur une application qui affiche le preview de la capture sous windows mobile.

Cordialement

Said