GDIPLUS.DLL

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

boutons XP color

Message par Anonyme2 »

Voici un aperçu des boutons XP en couleur du code ci-dessus

Image
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message par erix14 »

Merci pour ton code Denis :D
Personnellement, je préfère dessiner les boutons entièrement moi-même plutôt que d'en laisser une partie (les bords des boutons) par la procédure par défaut.
Car voici ce qu'il arrive :Imageça dépasse des bords :( alors que chez toi c'est nickel...
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

certains sont déjà au courant - d'autres pas, mais sachez que Denis
travaille dur sur la création d'une lib + manuel GDI pour purebasic 4.0
la tache est énorme parcequ'il y a beaucoup de fonctions GDI à implémenter.

même si je n'ai pas bcp de temps à consacrer à GDI (pour l'instant),
ce projet me tiens à coeur parce qu'il ouvre la possibilité d'implémenter
pour purebasic un nouveau format d'image : SVG.

SVG est un format d'image très particulier destiné surtout au navigateur web mais pas seulement. et surtout c'est un format vectoriel (genre de clip-art), et le corps du fichier .SVG est un simple fichier XML.

Un petit example :

http://upload.wikimedia.org/wikipedia/c ... le_svg.svg

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   version="1.0"
   x="0"
   y="0"
   width="300"
   height="200"
   id="svg2">
  <defs
     id="defs4" />
  <g
     id="layer1">
    <rect
       width="300"
       height="120"
       x="0"
       y="20"
       style="fill:green;"
       id="rect1306" />
    <rect
       width="80"
       height="150"
       x="20"
       y="30"
       style="fill:red;"
       id="rect1308" />
    <rect
       width="140"
       height="80"
       x="50"
       y="50"
       style="fill:blue;"
       id="rect1310" />
  </g>
</svg>
Un SVG plus abouti :
http://upload.wikimedia.org/wikipedia/c ... kpager.svg

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   version="1.0"
   width="128"
   height="128"
   id="svg2">
  <defs
     id="defs5">
    <linearGradient
       id="linearGradient2814">
      <stop
         style="stop-color:#d2d2d2;stop-opacity:1"
         offset="0"
         id="stop2816" />
      <stop
         style="stop-color:white;stop-opacity:1"
         offset="1"
         id="stop2818" />
    </linearGradient>
    <linearGradient
       id="linearGradient2792">
      <stop
         style="stop-color:#036fff;stop-opacity:1"
         offset="0"
         id="stop2794" />
      <stop
         style="stop-color:#8ec6ff;stop-opacity:1"
         offset="1"
         id="stop2796" />
    </linearGradient>
    <linearGradient
       id="linearGradient2782">
      <stop
         style="stop-color:#0037b3;stop-opacity:1"
         offset="0"
         id="stop2784" />
      <stop
         style="stop-color:#0037b3;stop-opacity:0"
         offset="1"
         id="stop2786" />
    </linearGradient>
    <linearGradient
       x1="48.103004"
       y1="147.66602"
       x2="123.94366"
       y2="79.834923"
       id="linearGradient2845"
       xlink:href="#linearGradient2792"
       gradientUnits="userSpaceOnUse"
       gradientTransform="translate(0,-60)" />
    <linearGradient
       x1="55.293175"
       y1="80.000015"
       x2="105.32492"
       y2="39.280434"
       id="linearGradient2847"
       xlink:href="#linearGradient2814"
       gradientUnits="userSpaceOnUse" />
    <linearGradient
       x1="86.772476"
       y1="-30.744043"
       x2="86.772476"
       y2="-28.523281"
       id="linearGradient2849"
       xlink:href="#linearGradient2782"
       gradientUnits="userSpaceOnUse"
       gradientTransform="matrix(1.01893,0,0,1.344331,-1.529123,10.58335)" />
  </defs>
  <use
     transform="translate(-32,32)"
     id="use2836"
     x="0"
     y="0"
     width="128"
     height="128"
     xlink:href="#g2822" />
  <use
     transform="translate(-16,16)"
     id="use2834"
     x="0"
     y="0"
     width="128"
     height="128"
     xlink:href="#g2822" />
  <g
     transform="translate(-4.063464,-2.031747)"
     id="g2822">
    <rect
       width="74.59066"
       height="66.5811"
       rx="3.3862422"
       ry="3.3862419"
       x="48.728004"
       y="20.459923"
       style="opacity:1;fill:url(#linearGradient2845);fill-opacity:1;fill-rule:nonzero;stroke:#000060;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:12.5;stroke-opacity:1"
       id="rect2790" />
    <rect
       width="64.846558"
       height="50.951309"
       x="53.600056"
       y="30.735994"
       style="opacity:1;fill:white;fill-opacity:1;fill-rule:nonzero;stroke:#0037b3;stroke-width:1.25000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:12.5;stroke-opacity:1"
       id="rect2760" />
    <rect
       width="61.460316"
       height="47.576721"
       x="55.293175"
       y="32.42329"
       style="opacity:1;fill:url(#linearGradient2847);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:12.5;stroke-opacity:1"
       id="rect1873" />
    <rect
       width="66.074074"
       height="2.9746165"
       x="52.986298"
       y="-30.735998"
       transform="scale(1,-1)"
       style="opacity:1;fill:url(#linearGradient2849);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:12.5;stroke-opacity:1"
       id="rect2780" />
  </g>
</svg>

à priori toutes les fonctions nécessaires à une implémentation
sont présentes dans GDI+, et associées à la bibliothèque libre 'libxml.lib'
ca pourrait permettre de faire un interpréteur SVG pour PB4.0

à noter que SVG est très populaire (sur le net), très abouti (très nombreuses fonctions de tracés), ouvert (fichier texte au format xml), facile à tester (suffit d'ouvrir le fichier fichier.svg dans votre navigateur web récent ie/opera/firefox).

sources :

parseur xml :
http://xmlsoft.org/

éditeur svg :
http://www.inkscape.org/

spécification svg :
http://www.w3.org/TR/SVG/

information wiki :
http://fr.wikipedia.org/wiki/SVG

parseur svg :
http://www.antigrain.com/download/index.html

examples svg :
http://upload.wikimedia.org/wikipedia/c ... plates.svg
http://david.bellot.free.fr/svg-cards/f ... -2.0.1.zip
Image
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Flype a écrit :certains sont déjà au courant - d'autres pas, mais sachez que Denis
travaille dur sur la création d'une lib + manuel GDI pour purebasic 4.0
la tache est énorme parcequ'il y a beaucoup de fonctions GDI à implémenter.
Nous avançons doucement sur la doc (environ 610 fonctions), j'ai presque terminé les LinearGradienBrush (une trentaine de fonctions, un fichier d'exemple par fonction et la page d'aide correspondante dans le fichier Chm). Cela prendra plusieurs mois et peut-être que certaines fonctions ne seront pas documentés, la doc de MS sur ces FlatAPI est inexistante (MS conseille d'utiliser la Poo pour GDI+ et n'a donc pas fait de doc sur les API de la Dll, heureusement on trouve de l'aide sur internet et en faisant des essais on arrive à comprendre).

Allez, j'y retourne :D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Merci Denis ! :D

bien que je n'ai pas la dll en question, j'aprecie l'effort pour nous tous :D

ce serai bien de mettre un lien vers cette fameuse DLL :D

bon courage :D
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

en attendant l'update majeure de denis, on peut toujours télécharger la lib actuelle, il y a un lien sur la 1ere page de ce topic. :wink:

voir le lien GDI là dedans :
http://purebasic.forum-gratuit.com/viewtopic.php?t=5075
Image
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

A ta connaissance Flype, CDI+ n'est qu'à la version 1.0 ou il existe une version 1.1 ou supérieure ?

Il me semble que la version 1.1 n'est jamais sortie (ce que j'ai pu lire à droite à gauche sur internet), certaines fonctions sont bien déclarées dans GDI+ mais en fait elles ne sont pas implémentées (elles retournent la constante #NotImplemented)

Pour les testeur de longhorn, y a-t-il une dll du style GDIxxxxx.dll ?
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

je ne sais pas en fait.

la 1.1 me semble bien la derniere.

cette fonction (V1.1) 'IsAlphaPixelFormat()' renvoie-t-elle -1 ?
Image
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Je n'ai pas installé la dll du pack car j'avais GDI+ avec XP, mais j'ai la version 1.0 car j'ai une erreur du linker avec IsAlphaPixelFormat()
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

salut denis,

à priori, la dernière révision est celle ci :

GDI+ 3102.1360 publié le 9/14/2004.

vu ici :
http://www.microsoft.com/downloads/deta ... 590feaa05a
Image
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

je rajouterais que microsoft explique ceci dans le package à télécharger :
===========
Gdiplus.dll
===========

For Windows XP use the system-supplied gdiplus.dll. Do not install a new gdiplus.dll over the system-supplied version (it will fail due to Windows File Protection).

For Windows 2000, Windows Millennium Edition, Windows NT 4.0 and Windows 98, install gdiplus.dll into the private directory of the application not into the system directory.

In addition to the rights granted in Section 1 of the Agreement ("Agreement"), with respect to gdiplus.dll for Windows 2000, Windows Millennium Edition, Windows NT 4.0 and Windows 98, you have the following non-exclusive, royalty free rights subject to the Distribution Requirements detailed in Section 1 of the Agreement:

(1) You may distribute gdiplus.dll solely for use with Windows 2000, Windows Millennium Edition, Windows NT 4.0 and Windows 98.
voici le contenu de l'archive :
Image

et les propriétés de la dll :
Image

par contre çà dit toujours pas si c'est la version 1.0, 1.1, ou plus.



et la version de la dll fournit dans mon install xp famille sp2 par défaut :
Image
Image
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Les fonctions suivantes sont implémentées à partir de GDI+ 1.1

Code : Tout sélectionner

GetPixelFormatSize(pixfmt.l)    
IsAlphaPixelFormat(pixfmt.l)     
IsCanonicalPixelFormat(pixfmt.l)  
IsExtendedPixelFormat(pixfmt.l)   
IsIndexedPixelFormat(pixfmt.l)    
essayes.

J'ai téléchargé le pack il y a quelque temps mais je n'ai pas encore regardé (l'écriture du fichier d'aide GDI+ me prend tout mon temps)
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

non - elles ne passent pas - erreur du linker.

j'ai télécharger la beta de vista (~3.6Go)
je l'installerais, et je te dirai...
Image
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

L'ide de PB plante régulièrement lorsque je lance deux exemples avec le debugger on.
Je suis persuadé que les thread utilisés pour le débugger en sont la cause car la doc MS explique bien les risques avec les thread et Gdi+
Avec les matrices j'ai eu souvent une erreur d'écriture/lecture d'adresse avec une fermeture franche de PB.
Si on désactive le debugger, ca ne plante pas.
Avec les pen, je bouton de fermeture sur la barre de tache ferme bien la fenêtre mais le bouton reste actif.

Vraiment très bien cette dll et pour l'instant assez simple d'utilisation et une seule commande qui m'a posé problème.

Aujourd'hui, il y a un peu plus de 120 fonctions décrites dans le chm avec pour chaque commande un fichier d'exemple (parfois plusieurs) sauf pour quelques une que l'on retrouve dans chaque exemple.

Il en reste 490 ..............

Rubriques terminées :
Brush
HatchBrush
initialisation
LinearGradientBrush
Matrix
Memory
PathGradientBrush
SolidBrush
Texture_Brush
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Vivement la fin !! :D
Merci pour ton boulot :D
je pense qu'elle nous sera bien utile cette lib :D
Répondre