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

Windows Forms Discussion :

[BufferedGraphics] Lenteurs avec un arrière plan


Sujet :

Windows Forms

  1. #1
    Membre éclairé Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Par défaut [BufferedGraphics] Lenteurs avec un arrière plan
    Bonjour à tous,

    J'ai essayé comme on m'avais précédemment conseillé ici d'utiliser les buffered graphics pour un programme que je suis en train de faire :

    un menu avec 5 boutons (images) et qui affiche une image transparente par dessus l'image séléctionnée au moment T.
    Mon menu :
    A B C [D] E

    Tout allait bien, quand je déplaçais avec les flèches ça allait assez vite et tout. Mais depuis que j'ai ajouté un fond à mon programme (en plein écran), il faut presque attendre une seconde quand j'appuie sur la flèche pour passer à l'icone suivante.

    Les éléments essentiels de mon code :
    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
     
            BufferedGraphicsContext context;
            BufferedGraphics bufferedGraphics;
            Graphics g;
    ...
     
    //dans le load :
                context = new BufferedGraphicsContext();
                context.MaximumBuffer = new Size(this.Width + 1, this.Height + 1);
     
                bufferedGraphics = context.Allocate(this.CreateGraphics(), new Rectangle(0, 0, this.Width, this.Height));
     
                g = bufferedGraphics.Graphics;
    ...
    //Dans la fonction lors que j'appiue sur une flèche du clavier :
                g.Clear(Color.Black);
                g.DrawImage(Image.FromFile(@"C:\wall.jpg"), new Point(0, 0));
                Image img_over = Image.FromFile(@"C:\over.png");
                int espace = (this.Width - (imglist.Images.Count * imglist.ImageSize.Width)) / (imglist.Images.Count + 1);
                int position_x = 0;
                for (int i = 0; i < imglist.Images.Count; i++) // 0 ==> 6
                {
                    position_x += espace;
                    g.DrawImage(imglist.Images[i], new Point(position_x, (this.Height - imglist.ImageSize.Height) / 2));
                    if (i == menu_position)
                    {
                        g.DrawImage(img_over, new Point(position_x - ((img_over.Width - imglist.ImageSize.Width) / 2), ((this.Height - imglist.ImageSize.Height) / 2) - ((img_over.Height - imglist.ImageSize.Height) / 2)));
                    }
                    position_x += imglist.ImageSize.Width;
                }
                bufferedGraphics.Render();
    Y a-t'il quelque chose que j'ai mal fait ??? ou est-ce que j'ai déja atteint les limites de c# (j'espère pas) ???

    Merci d'avance pour votre gracieuse aide !!!

  2. #2
    Membre éclairé Avatar de TrEiZe85
    Inscrit en
    Février 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Février 2007
    Messages : 82
    Par défaut
    Meme probleme que toi ! Je me suis résigné javai créé un background tout simple avec un dégradé de couleur mais ca faisait ramer enormement mon appli ! Je me suis résigné et j'utilise une simple couleur de background, et en effet aucun probleme de lenteur !

    Si quelqu'un a une solution je suis prenneur !

  3. #3
    Membre éclairé Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Par défaut
    bah en fait j'ai mis le chargement des images dans le load dans des variables images prédéfinies au lieu de les ouvrir à chaque fois et ça va déja bcp mieux, bon je sais pas si y a encore une façon d'améliorer.

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 200
    Par défaut
    autant le .net est très performant quand on fait des calculs, des boucles sur des collections énormes etc... autant en graphisme, c'est pas trop ca
    rajouter un fond non uni avec des objets transparents dessus et c'est fini !

    heureusement il y a moyen de s'en sortir mais ca peut etre assez long

    j'ai bien une solution, ayant fait des trucs dans le genre qui sont au final très performant

    en l'occurence il faut que tu créé un control spécial pour ton menu, hérité de control
    tu overrides onpaintbackground sans faire le mybase et tu va gérer la transparence toi meme
    donc prendre me.parent.backgroundimage, enfin juste la partie qui est dessous ton control, en faire un drawimage sur un bufferedgraphics puis dessiner ce que tu voulais mettre sur ce bufferedgraphics
    et donc quand tu fais ton render c'est joli et instantané
    après tu peux avoir deux buffer par image de ton menu, un sélectionné et un pas sélectionné vu que c'est que l'affichage normal qui est lent, le fait de créer les images c'est rapide, et de faire render c'est rapide aussi (un render prend moins d'une ms)


    et désolé si je t'ai découragé


    info supplémentaire : tous les controles héritent de control, c'est lui qui gère la transparence et bien d'autres choses sur onpaintbackground
    le problème aussi du framework c'est que onpaintbackground est appelé un peu trop souvent à mon gout, et 2x plus sur certains pc (à priori selon la carte graphique)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre éclairé Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Par défaut
    Non ça va tu ne m'a pas décourragé (je suis courrageux ), je te remercie pour tes infos je vais travailler tout ça.

    En tout cas merci bcp pour ton aide !!

  6. #6
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 523
    Par défaut
    Bonjour à tous,

    Et bien voilà, j'ai le même problème que vous tous

    J'ai besion d'un panel transparent qui lui même doit héberger des label transparent. J'ai suivi votre discussion et j'en suis venu à la conclusion que je devais ré-écrire des composants.

    Donc je prend une capture du background du parent (form) et je la copie sur le DC du panel.

    Voici ce que j'ai réalisé jusqu'ici dans le cas du Panel transparent :
    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
     
        class TransparentPanel : Control
        {
            public const int SRCCOPY = 13369376;
     
            [DllImport("gdi32.dll", EntryPoint = "DeleteDC")]
            public static extern IntPtr DeleteDC(IntPtr hDc);
     
            [DllImport("gdi32.dll", EntryPoint = "DeleteObject")]
            public static extern IntPtr DeleteObject(IntPtr hDc);
     
            [DllImport("gdi32.dll", EntryPoint = "BitBlt")]
            public static extern bool BitBlt(IntPtr hdcDest, int xDest,
                       int yDest, int wDest, int hDest, IntPtr hdcSource,
                       int xSrc, int ySrc, int RasterOp);
     
            [DllImport("gdi32.dll", EntryPoint = "CreateCompatibleBitmap")]
            public static extern IntPtr CreateCompatibleBitmap(IntPtr hdc,
                       int nWidth, int nHeight);
     
            [DllImport("gdi32.dll", EntryPoint = "CreateCompatibleDC")]
            public static extern IntPtr CreateCompatibleDC(IntPtr hdc);
     
            [DllImport("gdi32.dll", EntryPoint = "SelectObject")]
            public static extern IntPtr SelectObject(IntPtr hdc, IntPtr bmp);
     
            [DllImport("user32.dll", EntryPoint = "ReleaseDC")]
            public static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDc);
     
            [DllImport("user32.dll", EntryPoint = "GetDC")]
            public static extern IntPtr GetDC(IntPtr ptr);
     
            private BufferedGraphics bufferedGraphics;
     
            public TransparentPanel()
            {
                SetStyle( ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint, true);
                BufferedGraphicsManager.Current.MaximumBuffer = new Size(this.Width + 1, this.Height + 1);
                bufferedGraphics = BufferedGraphicsManager.Current.Allocate(this.CreateGraphics(), ClientRectangle);
            }
     
            protected override void OnPaintBackground(PaintEventArgs pevent)
            {
                // base.OnPaintBackground(pevent);
            }
     
            protected override void OnPaint(PaintEventArgs e)
            {
                Bitmap b = GetWindowBackgroundAsBitmap( this.Parent.Handle, this.Left, this.Top, this.Width, this.Height);
                bufferedGraphics.Graphics.DrawImage(b, 0, 0);
                bufferedGraphics.Render(e.Graphics);
                //base.OnPaint(e);
            }
     
            public static Bitmap GetWindowBackgroundAsBitmap(IntPtr wndHWND, int x, int y, int width, int height)
            {
                IntPtr wndHDC = GetDC(wndHWND);
                IntPtr capHDC = CreateCompatibleDC(wndHDC);
                IntPtr capBMP = CreateCompatibleBitmap(wndHDC, width, height);
                if (capBMP == IntPtr.Zero)
                {
                    ReleaseDC(wndHWND, wndHDC);
                    DeleteDC(capHDC);
                    return null;
                }
     
                IntPtr prvHDC = (IntPtr)SelectObject(capHDC, capBMP);
                BitBlt(capHDC, 0, 0, width, height, wndHDC, x, y, SRCCOPY);
                SelectObject(capHDC, prvHDC);
     
                Bitmap bmp = System.Drawing.Image.FromHbitmap(capBMP);
     
                ReleaseDC(wndHWND, wndHDC);
                DeleteDC(capHDC);
                DeleteObject(capBMP);
     
                return bmp;
            }              
        }
    Cependant, cela ne semble pas fonctionner, le panel ne se dessine pas. Pourtant si je sauvegarde le bitmap que la fonction de capture me génère, c'est exactement l'image qui correspond à l'arrière plan. Qu'est-ce qui ne fonctionne pas exactement ?

    Merci à tous

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 200
    Par défaut
    deja je pense qu'il vaut mieux traiter ca dans onpaintbackground et ne rien faire dans onpaint (tu as fais l'inverse)

    et si ca ne fonctionne toujours pas, essaie de render sur this.creategraphics plutot que sur e.graphics
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 523
    Par défaut
    Merci pour votre aide.

    Je vais regarder cela MERCI

    Il y a cependant un plus gros problème, la zone que je copie est toujours NOIRE. En gros, le bitmap généré par BitBlt est complètement NOIRE.

    Y-a-t-il quelque chose que je ne fais pas de bien ?

    Merci

  9. #9
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 200
    Par défaut
    et biein voir deja si dans onpaintbackground le bitmap sera toujours noir
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 523
    Par défaut
    Pourtant cela devrait être simple. On regarde le parent (récursif) de l'objet si il est transparent alors on continu vers l'autre parent... Une fois que nous avons trouvé le parent qui possède le background, alors on capture la zone correspondante dans un bitmap et on la dessine en tant que background sur notre contrôle.

    Voici ce que j'ai codé jusqu'ici :
    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
     
        class MyLabel : Control
        {
            public MyLabel()
            {
                this.SetStyle(ControlStyles.SupportsTransparentBackColor | ControlStyles.DoubleBuffer, false);
                this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint, true);
                this.UpdateStyles();
            }
     
            protected override CreateParams CreateParams
            {
                get
                {
                    CreateParams cp = base.CreateParams;
                    cp.ExStyle |= 0x00000020;
                    return cp;
                }
            }
     
            protected override void OnPaint(PaintEventArgs e)
            {
                // base.OnPaint(e);
            }
     
            protected override void OnPaintBackground(PaintEventArgs e)
            {
                Control p = Parent;
                Point ptLocation = this.Location;
                while (p != null && p.BackgroundImage == null)
                {
                    p = p.Parent;
                    if (p != null)
                    {
                        ptLocation.X += p.Location.X;
                        ptLocation.Y += p.Location.Y;
                    }
                }
                if (p != null)
                {
                    e.Graphics.DrawImage(p.BackgroundImage, new Rectangle(0, 0, Width, Height), new Rectangle(ptLocation.X, ptLocation.Y, this.Width, this.Height), GraphicsUnit.Pixel);
                }
     
                DrawLabel(e.Graphics);
            }
     
            protected override void OnTextChanged(EventArgs e)
            {
                base.OnTextChanged(e);
                this.Invalidate();
            }
     
            private void DrawLabel(Graphics g)
            {
                 g.DrawString(..);
            }
        }
    Cependant, cela ne semble pas fonctionner super bien, on dirait que les bitmap ne coinçïdent pas...

    Quelqu'un à une idée du problème ?

  11. #11
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 523
    Par défaut
    Bonjour à tous,

    J'ai lu attentivement les commentaire suivant sur ces liens au sujet du problème
    - Microsoft Forum
    - MBR
    - TheMSs

    J'ai remarqué que souvent, on parle du .Net comme étant l'avenir ! Bref, je trouve que c'est un peu déplorable comme situation. J'ai souvent à faire des interfaces (dans le domaine de l'électronique) qui nécessitent plus de 50 labels par fenêtre. Et au niveau du rafraîchissement c'est hyper lent ! Aussi, afin de rendre l'application plus belle estétiquement pour nos clients, on se dit que ce serait mieux avec un fond en dégradé ou encore une belle image de fond ou des contrôles skinned. Mais voilà que c'est de pire en pire, rafraîchir 25-30 label transparente sur une image de fond prend parfois 2-3 secondes ! Tout ça avec Pentium Dual Core 2Ghz avec 2Go de RAM Dual Channel.

    J'ai refais la même application en Delphi VCL Win32 et aussi en MFC et laissez-moi vous dire que c'est totalement incomparable ! Rassurez-moi tout de suite que MFC et Delphi VCL ne sont pas voués à disparaître pour faire place à cette lenteur ?

    Sinon, avez-vous trouvé des solutions qui fonctionnent depuis le temps ? Je sais que WPF semble avoir une belle avenir avec le Framework 3 mais c'est tout beau tout neuf encore. Je me demande toutefois si WPF pourra facilement régler notre problème ?

    C'était mes 2¢

  12. #12
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    salut

    j'ai pas teste WPF mais à priori, il s'appuie sur DirectX pour faire le rendu (quand cela est possible), donc, on peut espérer qu'en terme de perfo, cela soit un peu plus rapide

    Maintenant, je sais qu'il y a des astuces sous WPF pour avoir des perfos de dessin meilleures suivant le contexte des objets à dessiner.

    Mais pour ce qui est de GDI+, il faut reconnaitre, qu'au dela de classes plutot pratiques et simple d'utilisation, les performances sont loins d'etre au rendez vous.. Là ou MFC ou autre sont bien meilleurs en performance

    Maintenant, en GDI+, tu peux tres bien avoir des performances tres honorables (par exemple, j'ai developpé une librairie qui peut t'affichier 1000 elements à l'écran et les faire tourner avec de la selection, et ca tourne plutot bien sur un portable quelconque)... mais la technique retenue est que je n'ai pas 1000 UserControl (avec chacun leur context Graphique), Mais
    un panel à moi, qui appelle une méthode Render de chaque objet.. et chaque objet, n'hérite pas de userControl mais son directement des classes classiques C#... et dans leur render, je leur passe l'unique contexte graphique du panel pere... Ainsi, j'ai de super performance...(réellement sincère dans cette affirmation)...

    L'inconvénient par contre est que ces composants (n'étant pas des userControl), n'apparaissent pas dans la toolBox, et que si je veux faire des composants type ComboBox etc... je suis "obligé" de me les recoder.. Ce qui peut-etre quand meme fastidieux

    L'idéal serait de pouvoir déclarer des userControl sans que le Paint() ne leur soit envoyé (mais cela me semble impossible.. puisque c'est la pile windows du composant qui va etre solliciter.. alors certes, on pourrait filtrer le message, mais ca n'empecherait pas le système de l'emettre ... alors qu'avec ma librairie, je n'ai qu'un WM_PAINT envoyé au panel pere.. Et apres, je me gere tout à la main...

    Developpé une telle librairie, c'est grosso modo, 1 petit jour de travail pour l'aspect gestion, modele objet, et apres... le temps de developper chaque composant qui sera "hosté" dans le panel Pere (qui lui, est un usercontrol)

    voila pour ma contribution à 0.5 €

    The Monz, Toulouse

  13. #13
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 200
    Par défaut
    pour ma part, on a réécrit les composants de bases car on a besoin de plusieurs 10aines de label qui clignotent et ca fonctionne plutot pas mal (aucun scintillement et moins de 5% de pross)

    j'ai testé WPF sur 2008 beta 2
    à peine mieux que sous 2005 mais avec un peu moins de scintillement

    par contre j'ai cru entendre qu'il fallait une carte directx10 pour profiter de l'accéralation de wpf, ce qui semble plausible, mais je n'avais qu'une carte dx9
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  14. #14
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 523
    Par défaut
    Eh merci pour les 0.5 €

    J'ai lu vos réponses et vous semblez tout deux avoir trouvé une solution temporaire à ce que je vois. Néanmoins, auriez-vous des exemples à me montrer ? Soit un exécutable, une capture d'écran, une piste, quelque chose...

    Toutefois, développer une application qui d'espect navigation, ressemble à un site web sans utiliser de User Control, relève de l'enfer. Je m'explique ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ----------------
    |      |       |
       1        2  |
    |      |       |
    ----------------
    La partie 1 est un menu vertical contenant des boutons qui eux permettrent d'afficher la bonne section (interface) du côté droit (2).

    Si j'utilise ta solution theMonz31, lors de la conception de l'application je devrai placer une trentainne de panels (chacun se chevauchant) un par dessus l'autres. Et lorsque l'application sera en exécution, alterner (hide/visible) chaque panel en fonction du bouton cliqué.

    sperot51, j'ai passé de longues heures à essayer de créer simplement une label transparent mais en vian... Il y a toujours quelque chose qui ne va pas

    PS : Je ne savais pas que WPF préférait DirectX 10, c'est un peu moche ça

  15. #15
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 200
    Par défaut
    à savoir que ma solution, n'aide pas pour la transparence
    la transparence il faut y renoncer sous 2005 !!!
    un dégradé sur le fond est envisageable mais pas plus
    et après une couleur de fond définie
    (à savoir que ca peut rendre bien quand meme)

    si tu peux abandonner la transparence, je peux expliquer ce que j'ai fait
    (ou peut etre ré expliquer, j'ai pas relu le debut du post et je parle souvent de control design dans le coin)
    enfin tout dépend des besoins ...

    PS
    à savoir que pour dx10, je n'ai rien de scientifiquement pouvé la dessus
    c'est ptete juste une fausse rumeur (que je diffuse lol)
    mais ca semble probable, dx10 étant totalement différent de dx9, arrivé avec vista et pas adapté (pas adaptable ?) pour xp
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  16. #16
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 523
    Par défaut
    En fait j'avais vraiment besion d'une solution avec transparence

    Cependant, sur quoi t'appuies-tu pour affirmer que la transparence sous 2005 on peut oublier ça ? Il y a donc aucune solution nulle part ?

    Si c'est le cas, alors DotNet n'arriverait même pas à la hauteur pour faire de belles interfaces avec des image en background et des étiquettes transparentes ? J'aurais donc du rester à Delphi VCL

  17. #17
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 200
    Par défaut
    je m'appuie sur ce que j'ai testé ...
    et c'est pas faute d'avoir cherché
    sur tous les forums du monde, personne n'a de solution pour avoir de la transparence performante
    et donc avec plus de 10 controles transparents sur un fond de type image c'est pas jouable
    avec un fond uni, ca doit aller encore ...
    mais d'ici quelques semaines j'aurais peut etre testé wpf 2008 un peu plus ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  18. #18
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 523
    Par défaut
    Comme tu dis, c'est pas très marant cette histoire de performance avec la transparence.

    J'ai utilisé Delphi Win32 VCL et j'ai fait une application avec trois fois plus de labels transparentes, avec un timer qui change les valeur au 500 millisecondes et tout ça sur une fenêtre ayant un image en background de 1024x1024px et ça roulait très bien ! Je ne sais pas comment Delphi gère la transparence mais c'est parfait !

    Bref, je suis vraiment déçu des performance du Framework Microsoft on beaucuop de boulot à faire sur ce point. Le hic avec le WPF c'est que si ça utilise le DX10 alors il est impératif que l'ordinateur exécutant le programme soit équipé d'une carte DX10 ! Hors que de base, si je compare avec l'application conçu en Delphi Win32, pourtant lui ne se sert que de l'API et aucune accélération matériel.

    Mais tiens moi au courant pour tes tests du WPF... on ne peut pas toujours que chialer

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

Discussions similaires

  1. Problème avec l'arrière plan d'un JComboBox
    Par amine1980 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 11/02/2011, 00h19
  2. Réponses: 3
    Dernier message: 27/11/2008, 16h50
  3. Encore un souci avec l'arrière-plan Word !
    Par spyto dans le forum Word
    Réponses: 5
    Dernier message: 28/05/2008, 15h24
  4. Réponses: 4
    Dernier message: 21/05/2007, 07h34
  5. Afficher un fond en arrière plan avec des boutons
    Par eGen dans le forum Agents de placement/Fenêtres
    Réponses: 15
    Dernier message: 03/04/2005, 23h37

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