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

C++Builder Discussion :

Image PNG et fond transparent


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de Claude URBAN
    Homme Profil pro
    Prendre le temps de vivre. . .
    Inscrit en
    Mai 2006
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Prendre le temps de vivre. . .

    Informations forums :
    Inscription : Mai 2006
    Messages : 274
    Par défaut Image PNG et fond transparent
    Bonjour,

    Je pense avoir épuisé toutes les ressources mises à ma disposition et je ne sais plus ou chercher.
    Google, les Faqs, Tutos et autres n'ont plus de secret pour moi.
    Bien que cela m'ait été fort profitable, au niveau de mon apprentissage, ça n'a en rien permis de résoudre mon problème.
    Aussi il ne me reste plus qu'à faire appel à vous.
    Et j'espère que " vous saurez être à la hauteur de votre réputation…" (PUB Black Jack)

    Bon, bref.
    Je suis sous Windows XP avec BCB6.
    Je ne suis pas un professionnel, mais un amateur, et un amateur passionné. ( limite cinglé… )

    Problème simple: ( mais réponse semble t-il extrêmement compliquée )
    Je cherche à poser une image PNG avec un fond transparent, sur le bureau et de pouvoir la déplacer.
    Tout le monde connaît les compagnons d'OFFICE ( trombone, médor, robot… ) ?
    Voilà, c'est exactement ça.

    Toutes les réponses à ce type de question que j'ai pu trouver viennent de Delphi, (à croire que la communauté BCB est inexistante..) et/ou me renvoient sous Windows, VC, VB etc…

    Y-a-t-il une possibilité purement BCB ? sans être obligé de faire appel à:
    WS_LAYERED, UpdateLayeredWindow( ) et autres fonctions typiquement Microsoft.
    Je n'ai rien contre MSDN, mais si j'ai choisi BCB, c'est que justement je ne voulais pas apprendre VC++ qui me semblait trop compliqué.

    Bien évidemment, AlphaBlend, AlphaBlendValue, Transparent et TransparentColorValue n'apporte aucune réponse satisfaisante, seul …Brush->Style = clClear est satisfaisant au niveau qualité, mais le fond reste figé…

    La transformation de PNG en BMP " dégueulasse" la qualité de l'image et le rendu n'est pas satisfaisant.

    Quand avec Transparent et TransparentColorValue, la couleur du fond reste sur environ 10 à 20 pixels ( ou peut-être plus ) autour de limage…en épousant son contour.

    ??????

    Je continu à chercher quand même, mais je ne sais vraiment plus ou chercher et je ne voudrais pas être obligé de programmer avec MSDN.

    J'ai lu au passage quelque chose sur la JAPI… fait-elle aussi cela?

    Un dernier point, j'ai beaucoup de mal avec la langue de Shakespeare…

    D'avance merci pour votre aide.

    @++ ( j'espère )

    Claude

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Par défaut
    Ce n'est pas spécifiquement VC de faire appel aux fonctions de l'API Win32 (AlphaBlend et consort). Les frameworks MFC, ATL, WTL sont aussi des wrappers, mais il est vrai que la VCL est assez confortable (mon grand regret est l'inacessibilité des méthodes protégées).
    Si tu ne veux pas programmer avec le SDK Il te faut trouver un composant qui fasse ce que tu souhaite (Delphi ou BCB). Il y a 3 solutions: composants Delphi/BCB, programmation API ou librairie (ActiveX ou lib).

    Perso si je devais faire ce que tu veux - et si j'ai bien compris - je passerais par les assistants Office. Il y a une librairie pour animer les assistants et c'est très facile à programmer (tu trouveras du reste des composants pour ça). Le hic est que les assistants utilisent un format interne (il y a un outil pour créer les animations) et que tu ne pourras pas manipuler des PNG directement.

    Voici un composant en Delphi:
    http://www.delphiarea.com/products/assistant/

    yarp
    www.senosoft.com

  3. #3
    Membre éclairé
    Avatar de Claude URBAN
    Homme Profil pro
    Prendre le temps de vivre. . .
    Inscrit en
    Mai 2006
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Prendre le temps de vivre. . .

    Informations forums :
    Inscription : Mai 2006
    Messages : 274
    Par défaut
    @Yarp

    Bonsoir et merci pour ta réponse et tes liens qui malheureusement pour moi, sont ENCORE en anglais...
    (à croire que les Français ne savent rien faire dans ce domaine...)

    En fait, ce n'est pas un problème d'animation, mais un problème de transparence.
    Mon image est fixe et fait partie d'un programme globale.
    Je ne recherche pas non plus du " tout fait ".
    Mon hobby reste avant tout la programmation et j'aurais souhaité pouvoir réaliser mon programme avec le language que je connais le mieux.(l'objectif de ce PRG étant de me permettre d'approfondir justement CE language tout en m'amusant...alors si je passe à un autre !!!! mais bon, si je ne peux pas faire autrement. Il faut quand même bien que je le finisse ce p... . de programme )

    Il est surprenant quand même qu'il n'existe rien dans ce language (Borland)même pas une petite API BCB et que personne utilisant BCB n'ai essayé de faire ce genre de PGR ...

    Etre obligé de faire appel à la concurence ou de transcrire un PGR Delphi, qui lui aussi du reste fait appel à l'API WIN 32...dommage.

    Au fil de mes recherches, j'ai du reste eu l'impression que cette histoire de transparence intéressait beaucoup les Delphistes et pas du tout les Buildertistes ( boff, c'est pas terrible comme nom, mais tout le monde comprendra, enfin je l'espère..)
    Mais alors, pourquoi ???

    Vais-je être OBLIGE de me mettre à l'API WIN32 ???

    A suivre

    Claude

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Par défaut
    > Je ne recherche pas non plus du " tout fait ".
    > Mon hobby reste avant tout la programmation

    Oui, je te comprends. Moi aussi ça me frustre quand je n'ai rien à programmer.

    Si c'est un problème de transparence, il faut que tu explique exactement ce que tu affiche et comment. Un TImage a des fonctions de transparence, un TBitmap n'en as pas.
    Si ton image est dans une TForm (ou autre composant Delphi), j'avais compris sur le bureau, tu la colles dans un TImage qui gère la transparence tout seul.
    Si tu dessine ton Image toi-même, alors gère la transparence toi-même (avec AlphaBlend, certes c'est de l'API mais il faut assumer).
    Tu peux aussi si tu n'aime décidement pas AlphaBlend, créer un bitmap en mémoire et parcourir les pixels (propriété ScanLine) et remplacer les pixels "transparents" par la couleur de la form (clBtnFace), puis Blitter le bitmap sur ton écran (je ne sais pas comment on fait en BCB car j'utilise toujours l'API dans ce cas, mais regarde dans TCanvas, TBimap et/ou TPicture tu trouveras tout ce qu'il te faut). Tu obtiendra ainsi le même résultat qu'avec AlphaBlend, mais est-ce plus simple pour autant ?
    Quand a savoir si c'est en Delphi ou en BCB, ce n'est pas très important puisque BCB bouffe les 2 (c'est un sacré point fort). Bien que comme toi je préfère avoir mon code en C++.

    Enfin en ce qui concerne l'API Win32, je ne vois pas ce qui te bloque. La VCL n'est rien d'autre qu'une surcouche à cette API, elle n'en couvre pas toutes les zones. Au contraire son point fort est d'être très ouverte vers Windows (l'API s'entends) et donc il est parfois plus simple d'appeler les fonctions de dessin de Windows avec la Handle du Bitmap que de s'embêter à tout traduire en VCL (comme le montre le AlphaBlend maison ci-dessus). Question de point de vue, mais dès que je peux je n'hésite pas à appeler le SDK.

    Je m'amuse en ce moment comme un petit fou avec la fonction GradientFill (de l'API). Et je te souhaite autant de plaisir avec ton bitmap.

  5. #5
    Membre éclairé
    Avatar de Claude URBAN
    Homme Profil pro
    Prendre le temps de vivre. . .
    Inscrit en
    Mai 2006
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Prendre le temps de vivre. . .

    Informations forums :
    Inscription : Mai 2006
    Messages : 274
    Par défaut
    Re

    J'ai sur mon bureau un widget météo de chez Yahoo!.
    Je cherche à faire la même chose en C++.
    ( pour moi,encore une fois pour le plaisir et pour progresser en programmation. )

    Après avoir réglé le pb internet et RSS, J'en suis maintenant à l'affichage des nuages et soleil.
    Images PNG excellentes au niveau qualité.
    Le travail se fait avec BCB6 au travers une Form que je rends invisible pour ne laisser sur le bureau que ( pour le moment ) le nuage ou le soleil.

    L'image PNG est "collée" sur un Timage.

    Ce n'est pas que je n'aime pas les Alphamachins et autres, mais c'est que ça ne résoud pas mon pb de transparence.
    Scanline, pixels et autre non plus.
    Pour pouvoir travailler sur une image, ( sauf erreur ) il faut la traduire en BMP ce qui la dégueullasse, cette image PNG à en plus une transparence progressive ce qui donne un effet de 3D...et qui la rend difficile à scanner sans l'abîmer

    Avec AlphaBlend -> c'est toute la Form qui est transparente.(y compris l'image PNG)
    Avec Transparentxxx..-> limage PNG est non utilisable. (Fond transparent mais Zone de la couleur du fond autour de l'image)
    Avec Style->dsClear Image ok, transparence OK, mais fond FIGé...

    Pour solutionner le même pb, Delphi utilise aussi l'API WIN32...que je maîtrise encore moins bien que BCB et je voudrais encore une fois éviter. Si possible.

    Mais bon

    Claude

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Par défaut
    > Pour pouvoir travailler sur une image, ( sauf erreur ) il faut la traduire en
    > BMP ce qui la dégueullasse

    Oui, il faut la traduire en BMP (Windows ne sait afficher que du BMP), mais non ça ne la modifie pas. Cela dépends comment tu la charges, avec quel composant ou librairie (libpng est très très bien mais il faut coder ce n'est pas un composant).

    Donc si je comprends bien tu as la transparence ok mais tu ne parviens pas à bouger ton image tout simplement (c'est ce que je comprends avec Fond figé) ? Rien à voir avec AlphaBlend donc ?

    Pour un fond figé tu peux essayer ça dans le OnMouseDown de la TImage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ::PostMessage(this->Handle, WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x,point.y));
    Je n'ai pas CBuilder sur ce poste et pas pu tester, ni vérifier le nom du point dans le MouseDown de CBuilder, le code ci-dessus vient des MFC. Je me rappelle avoir fait un test similaire cette semaine et cela fonctionnait mais étais horriblement sacadé (mais ce n'étais pas tout à fait ça alors essaye tu verras bien).

    Sinon en Delphi:
    http://delphi.about.com/od/windowssh...gnocaption.htm

Discussions similaires

  1. [SP-2007] Afficher des images avec un fond transparent avec le composant "Summary link webpart"
    Par cloeclodesonoeuf dans le forum SharePoint
    Réponses: 1
    Dernier message: 20/09/2012, 10h35
  2. image png avec fond transparent
    Par tortuegenie dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 08/12/2008, 09h13
  3. Obtenir une image avec un fond transparent
    Par LeXo dans le forum Imagerie
    Réponses: 9
    Dernier message: 28/03/2007, 11h38
  4. [D5] Zoom d'image PNG avec transparence
    Par Thierry Laborde dans le forum Delphi
    Réponses: 9
    Dernier message: 12/06/2006, 15h41
  5. Image GIF a fond transparent dans un formulaire ?
    Par Coquelicot dans le forum IHM
    Réponses: 4
    Dernier message: 25/10/2004, 12h08

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