Filtre Directshow Overlay Text avec alpha

Résolu
AlexV4x Messages postés 4 Date d'inscription vendredi 23 février 2007 Statut Membre Dernière intervention 15 mai 2007 - 15 mai 2007 à 11:15
mascoolj Messages postés 1 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 26 juin 2009 - 26 juin 2009 à 15:14
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

AlexV4x Messages postés 4 Date d'inscription vendredi 23 février 2007 Statut Membre Dernière intervention 15 mai 2007
15 mai 2007 à 12:24
Desolé, erreur classique, j'avais oublié de charger la GDI (shame )

Ben pour ceux que ca interesse, le code ci-dessus fonctionne...
3
aurelienvieille Messages postés 2 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 22 mai 2007
22 mai 2007 à 15:47
En fait ce qui m'interresse terriblement, c'est ton filtre :)
Cordialement
Crealinks
0
mascoolj Messages postés 1 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 26 juin 2009
26 juin 2009 à 15:14
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
0