Mike Gagnon Canada Membre Simple # 0000000025 enregistré le 14/10/2004
Gagnon Mike Pointe Cla H9R 3K8 de la société Carver Technologies Inc. Fiche personnelle
Note des membres pas de note
Contributions > 11 - GDI +
Fonctions de GDI+
# 0000000164
ajouté le 23/03/2005 22:29:28 et modifié le 29/03/2006
consulté 9899 fois
Niveau
initié
Version(s) Foxpro : VFP 9.0
Description
Voici quelques fonctions utiles exposées par GDIPLUS.vcx
N.B.
Il faut noter que lorsqu'on utlise des formulaires Top niveau (ou des
formulaires avec les Scrollbars réglés autre que 0), lu formulaire
lui-meme en composé deux deux formulaires (ou trois dans le cas de top
niveau et scrollbars). Le formulaire parent est la portion entete et
bordures, est le formulaire enfant (child) est la portion que nous
préoccupe, la portion sans bordure à l'intérieur de la portion titre et
bordure.
Exemple d'appel pour un formulaire REGULIER et trouver le hWnd
oGr.CreateFromHWND(Thisform.HWnd)
Pour faire appel à un formulaire Top niveau et trouver le HWnd
Declare Long GetWindow in Win32API Long, Long #DEFINE GW_CHILD 5 oGr.CreateFromHWND( GetWindow(Thisform.HWnd,GW_CHILD) )
Code source :
&&1. Charger un image sur un formulaire et faire un rotation
&& 2 Ecrire du texte avec n'importe quel angle sur un formulaire
PUBLIC oform1
oform1=NEWOBJECT("form1")
oform1.Show RETURN DEFINECLASS form1 ASform Top = 2 Left = 70 Height = 481 Width = 603 DoCreate = .T. Caption = "Texte avec un angle"
nsavegraphicshandle = .F. Name = "Form1" ADD OBJECT command1 AScommandbuttonWITH ; AutoSize = .T., ; Top = 396, ; Left = 288, ; Height = 27, ; Width = 71, ; Caption = "Clicker ici", ; Name = "Command1" ADD OBJECT text1 AStextboxWITH ; Height = 25, ; Left = 180, ; Top = 24, ; Width = 325, ; Name = "Text1" ADD OBJECT label1 ASlabelWITH ; Caption = "Texte", ; Height = 17, ; Left = 108, ; Top = 24, ; Width = 40, ; Name = "Label1" ADD OBJECT spinner1 ASspinnerWITH ; Height = 24, ; Increment = 5.00, ; Left = 372, ; SpinnerHighValue = 360.00, ; SpinnerLowValue = 0.00, ; Top = 72, ; Width = 121, ; Name = "Spinner1" PROCEDURE command1.Click LOCAL lcText, lnAngle
lcText = ALLTRIM(this.Parent.text1.Value)
lnAngle = this.Parent.spinner1.value Local oGr As GpGraphics Of ffc/_gdiplus.vcx
oGr = Newobject('GpGraphics',Home(1)+'ffc/_gdiplus.vcx')
oGr.CreateFromHWND( Thisform.HWnd )
oFont = Newobject('GpFont',Home(1)+'ffc/_gdiplus.vcx')
oFont.Create( "Arial" ; && font name
, 20 ; && size in units below
,1; && attributes
, 2 ; && units
)
oBounds = Newobject( ; 'GpRectangle',Home(1)+'ffc/_gdiplus.vcx','' ;
, 200 ;
, 50 ;
, 289 ;
, 145 ;
) Local oFillColor As GpColor Of ffc/_gdiplus.vcx ;
, oBrush As GpSolidBrush Of ffc/_gdiplus.vcx
oFillColor = Newobject( ; 'GpColor',Home(1)+'ffc/_gdiplus.vcx','' ;
, 0,255,0 ) && green
oBrush = Newobject( ; 'GpSolidBrush', Home(1)+'ffc/_gdiplus.vcx', '' ;
, m.oFillColor )
oStringFormat = Newobject( ; 'GpStringFormat',Home(1)+'ffc/_gdiplus.vcx')
oStringFormat.Create( )
oStringFormat.Alignment = 2
oStringFormat.LineAlignment = 2
oBounds.W = oBounds.W - 4
oBounds.H = oBounds.H - 4
oBounds.X = oBounds.X + 4
oBounds.Y = oBounds.Y + 4
oBrush.BrushColor = 0xA8000000
oGr.RotateTransform(lnAngle)
oGr.DrawStringA( lcText ;
, oFont, oBounds, oStringFormat, oBrush ) ENDPROC ENDDEFINE
&& Stoker un image, écrire du texte dans le coin gauche (date) et sauvegarder en JPEG sur un nouveau nom.
lcfile = GETPICT() SETCENTURYon Public oLogoImage As GpImage OfHome(1)+"ffc/_gdiplus.vcx"
oLogoImage = Newobject('GpImage',Home(1)+'ffc/_gdiplus.vcx')
oLogoImage.CreateFromFile(lcFile)
oRect= Newobject( ; 'GpRectangle',Home(1)+'ffc/_gdiplus.vcx','',5, 5, 289, 145) Public oGr As GpGraphics OfHome(1)+"ffc/_gdiplus.vcx"
oGr = Newobject('GpGraphics',Home(1)+'ffc/_gdiplus.vcx')
oGr.CreateFromImage(oLogoImage) Local oFillColor As GpColor Of ffc/_gdiplus.vcx ;
, oBrush As GpSolidBrush Of ffc/_gdiplus.vcx
oFillColor = Newobject( ; 'GpColor',Home(1)+'ffc/_gdiplus.vcx','' ;
, 200,200,200 ) && green
oBrush = Newobject( ; 'GpSolidBrush', Home(1)+'ffc/_gdiplus.vcx', '' ;
, m.oFillColor )
oBounds = Newobject( ; 'GpRectangle',Home(1)+'ffc/_gdiplus.vcx','' ;
, 0 ;
, 0 ;
, 289 ;
, 145 ;
)
oLineColor = Newobject( ; 'GpColor',Home(1)+'ffc/_gdiplus.vcx','', 0,0,100 ) oPen = Newobject('GpPen', Home(1)+'ffc/_gdiplus.vcx' ) oPen.Create( m.oLineColor, 3 )
oFont = Newobject('GpFont',Home(1)+'ffc/_gdiplus.vcx')
oFont.Create( "Arial" ; && font name
, 20 ; && size in units below
,1; && attributes
, 2 ; && units
)
oStringFormat = Newobject( ; 'GpStringFormat',Home(1)+'ffc/_gdiplus.vcx')
oStringFormat.Create( )
oStringFormat.Alignment = 0
oStringFormat.Linealignment =0
oGr.DrawStringA(Dtoc(Date()), oFont, oBounds,oStringFormat,oBrush)
oLogoImage.Savetofile( "c:\example.jpg", ; "image/jpeg", "quality=100" )
&& Effet 3 dimension sur les polices.
Public oform1
oform1=Newobject("form1")
oform1.Show Return DefineClass form1 AsForm Top = 2 Left = 70 Height = 481 Width = 603 DoCreate = .T. Caption = "Texte avec un angle" BACKCOLOR = RGB(255,255,255)
nsavegraphicshandle = .F. Name = "Form1" Add Object command1 AsCommandButtonWith ; AutoSize = .T., ; Top = 396, ; Left = 288, ; Height = 27, ; Width = 71, ; Caption = "Clicker ici", ; Name = "Command1" Add Object text1 AsTextBoxWith ; Height = 25, ; Left = 180, ; Top = 24, ; Width = 325, ; Name = "Text1" Add Object label1 AsLabelWith ; Caption = "Texte", ; Height = 17, ; Left = 108, ; Top = 24, ; Width = 40, ; Name = "Label1" Procedure command1.Click Local lcText
lcText = Alltrim(This.Parent.text1.Value) Local oGr As GpGraphics Of ffc/_gdiplus.vcx
oGr = Newobject('GpGraphics',Home(1)+'ffc/_gdiplus.vcx')
oGr.CreateFromHWND( Thisform.HWnd )
oFont = Newobject('GpFont',Home(1)+'ffc/_gdiplus.vcx')
oFont.Create( "Arial", 32,1, 2)
oBounds = Newobject('GpRectangle',Home(1)+'ffc/_gdiplus.vcx','', 200, 50, 289, 145)
oBounds2 = Newobject('GpRectangle',Home(1)+'ffc/_gdiplus.vcx','', 50, 20, 289, 145) Local oFillColor As GpColor Of ffc/_gdiplus.vcx ;
, oBrush As GpSolidBrush Of ffc/_gdiplus.vcx
oFillColor = Newobject('GpColor',Home(1)+'ffc/_gdiplus.vcx','', 0,0,0 )
oFillColor2 = Newobject( ; 'GpColor',Home(1)+'ffc/_gdiplus.vcx','', 255,255,255 )
oBrush = Newobject('GpSolidBrush', Home(1)+'ffc/_gdiplus.vcx', '', m.oFillColor )
oBrush2 = Newobject('GpSolidBrush', Home(1)+'ffc/_gdiplus.vcx', '', m.oFillColor2 )
oStringFormat = Newobject('GpStringFormat',Home(1)+'ffc/_gdiplus.vcx')
oStringFormat.Create( )
oStringFormat.Alignment = 2
oStringFormat.LineAlignment = 2
oGr.DrawStringA( lcText, oFont, oBounds, oStringFormat, oBrush )
oBounds.X = oBounds.X + 1
oGr.DrawStringA( lcText , oFont, oBounds, oStringFormat, oBrush2 ) Endproc Enddefine
&& Convertir un image JPEG en grayscale (Tons de gris). L'idée est de replacer les valeurs RBG de chaque pixel par la moyenne de la somme des trois valeurs qui devient un ton de gris.
Function ConvertToGrayscale(lcImage) SetClasslibToHome()+'ffc/_gdiplus.vcx'Additive
oLogoImage = Newobject('gpBitmap',Home()+'ffc/_gdiplus.vcx')
oLogoImage.CreateFromFile(lcImage) Private x,Y,nColor
lnWidth = oLogoImage.imagewidth
lnHeight = oLogoImage.imageheight For Y=0 To lnHeight-1 For x=0 To lnwidth-1 WAITWINDOWNOWAIT"Largeur en pixels: "+TRANSFORM(x)+", hauteur en pixels :" +TRANSFORM(y)
nColor = oLogoImage.GetPixel(x,Y)
oColor = Createobject("gpColor",nColor)
oAvg = (oColor.Red+oColor.Green+oColor.Blue)/3
oColor.set(INT(oAvg),INT(oAvg),INT(oAvg))
oLogoImage.SetPixel(x,Y,oColor.ARGB) NEXT NEXT
oLogoImage.SaveToFile("c:\ex.jpg","image/jpeg", "quality=100" ) Endfunc
Commentaires
le 14/04/2005, FredA a écrit : bien vu ton explication sur les forms (child ou zone client)
le 14/04/2005, Mike Gagnon a écrit : Je croyais bien que tu verrais l'impact de cette révélation, et cela n'est pas juste pour GDI, mais cela se répercute sur d'autres accès au formulaire qui semblait un 'bug', mais qui est en fait génial.
bien vu ton explication sur les forms (child ou zone client)