Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Create and save a bitmap
Message
De
05/02/2013 12:20:29
 
 
À
05/02/2013 11:40:29
Dragan Nedeljkovich (En ligne)
Now officially retired
Zrenjanin, Serbia
Information générale
Forum:
Visual FoxPro
Catégorie:
Photos et traitement d'images
Versions des environnements
Visual FoxPro:
VFP 9 SP2
Divers
Thread ID:
01565159
Message ID:
01565188
Vues:
57
Thanks, I will try them, and yours out.

>>>Check GdiPlusX on VFPx
>>
>>Thanks. I have been looking at, but been having a bit of trouble understanding it.
>
>There are a couple of articles in UtMag here... not sure if they use the same library. If the one at VFPx uses system.prg, here's an example of what I did for fun. Prepare the red/green 3d glasses.
>
>
DO SYSTEM
>RAND(-1)
>
>LOCAL oBMP AS xfcBitmap
>LOCAL oGFX AS xfcGraphics, oCan
>LOCAL oBrush AS xfcLinearGradientBrush
>
>loFrm=NEWOBJECT("gdiform")
>
>#DEFINE hWidth 1200
>#DEFINE hHeight 700
>#DEFINE hPixPer1 450
>
>
>loFrm.SHOW(0)
>READ EVENTS
>
>
>*---------------------------------------------------
>
>DEFINE CLASS gdiForm AS FORM
>	WIDTH=hWidth+100
>	HEIGHT=hHeight+100
>	BACKCOLOR=-1
>	DIMENSION aPoints[41, 41]
>	pixelsPer1=hPixPer1
>	ADD OBJECT cmd1 AS COMMANDBUTTON	;
>		WITH LEFT=40, TOP=3, CAPTION="flip 1"
>	ADD OBJECT cmd3 AS COMMANDBUTTON	;
>		WITH LEFT=200, TOP=3, CAPTION="redraw"
>	ADD OBJECT img1 AS IMAGE ;
>		WITH 		TOP=30, LEFT=50, WIDTH=hWidth, HEIGHT=hHeight
>	ADD OBJECT img2 AS IMAGE ;
>		WITH 		TOP=30, LEFT=50, WIDTH=hWidth, HEIGHT=hHeight
>
>
>	PROCEDURE INIT()
>		THIS.PopulateCursor()
>
>
>	PROCEDURE cmd3.CLICK
>		THISFORM.loPov.angle = THISFORM.loPov.angle + 0.1
>		THISFORM.SHOW()
>
>	PROCEDURE SHOW(tnHow)
>		LOCAL loPov, loPov2
>*!*	LOCAL lcPng, lcPng2
>*!*			lcPng=FORCEPATH(FORCEEXT(SYS(2015), "png"), GETENV("TEMP"))
>*!*			lcPng2=FORCEPATH(FORCEEXT(SYS(2015), "png"), GETENV("TEMP"))
>		IF NOT PEMSTATUS(THISFORM, "lopov",5)
>			loPov=CREATEOBJECT("empty")
>			ADDPROPERTY(loPov, "x", 12)
>			ADDPROPERTY(loPov, "y", 12)
>			ADDPROPERTY(loPov, "z", 12)
>			ADDPROPERTY(loPov, "angle", 0)
>			ADDPROPERTY(loPov, "color", 0xffff0000)
>			THISFORM.ADDPROPERTY("loPov", loPov)
>		ELSE
>			loPov=THISFORM.loPov
>		ENDIF
>		THIS.dodraw(THIS.img1, loPov)
>		loPov2=THIS.MakeDup(loPov)
>*		loPov2.angle = loPov2.angle + 0.05
>		loPov2.x=loPov.x+0.5
>		loPov2.COLOR=0xaf007f7f
>		THIS.dodraw(THIS.img2, loPov2)
>
>
>
>	PROCEDURE dodraw(tcPng, toPOV)
>		LOCAL oBMP AS xfcBitmap
>		LOCAL oGFX AS xfcGraphics
>		LOCAL oBrush AS xfcLinearGradientBrush, loPen, lni, lnJ, oP1, op2
>
>		WITH _SCREEN.SYSTEM.Drawing
>			oBMP = .BITMAP.New(hWidth, hHeight)
>			oGFX = .Graphics.FromImage(oBMP)
>			oGFX.useprecision=.T.
>			oBrush=.SolidBrush.New(toPOV.COLOR)
>			loPen=.PEN.New(oBrush, 1)
>			
>			* draw the coordinates, xy plane first
>*!*				oBrush=.SolidBrush.New(0xff00ffff)
>*!*				loPen=.PEN.New(oBrush, 1)
>
>			* x fixed
>			oP1=THIS.xyzToPix(make3(-1, -1, 0), toPOV)
>			op2=THIS.xyzToPix(make3(-1, 1, 0), toPOV)
>			oGFX.DrawLine(loPen, oP1.x, oP1.Y, op2.x, op2.Y)
>
>			oP1=THIS.xyzToPix(make3(0, -1, 0), toPOV)
>			op2=THIS.xyzToPix(make3(0, 1, 0), toPOV)
>			oGFX.DrawLine(loPen, oP1.x, oP1.Y, op2.x, op2.Y)
>			
>			oP1=THIS.xyzToPix(make3(1, -1, 0), toPOV)
>			op2=THIS.xyzToPix(make3(1, 1, 0), toPOV)
>			oGFX.DrawLine(loPen, oP1.x, oP1.Y, op2.x, op2.Y)
>			* y fixed
>			oP1=THIS.xyzToPix(make3(-1, -1, 0), toPOV)
>			op2=THIS.xyzToPix(make3(1, -1, 0), toPOV)
>			oGFX.DrawLine(loPen, oP1.x, oP1.Y, op2.x, op2.Y)
>			
>			oP1=THIS.xyzToPix(make3(-1, 0, 0), toPOV)
>			op2=THIS.xyzToPix(make3(1, 0, 0), toPOV)
>			oGFX.DrawLine(loPen, oP1.x, oP1.Y, op2.x, op2.Y)
>
>			oP1=THIS.xyzToPix(make3(-1, 1, 0), toPOV)
>			op2=THIS.xyzToPix(make3(1, 1, 0), toPOV)
>			oGFX.DrawLine(loPen, oP1.x, oP1.Y, op2.x, op2.Y)
>			
>			
>			
>
>			FOR lni=1 TO 41
>				FOR lnJ=1 TO 40
>					ASSERT not (lni=20 and lnj=19)
>					oP1=THIS.xyzToPix(THIS.aPoints[lni, lnJ], toPOV)
>					op2=THIS.xyzToPix(THIS.aPoints[lni, lnJ+1], toPOV)
>					oGFX.DrawLine(loPen, oP1.x, oP1.Y, op2.x, op2.Y)
>				ENDFOR
>			ENDFOR
>			FOR lnJ=1 TO 41
>				FOR lni=1 TO 40
>					oP1=THIS.xyzToPix(THIS.aPoints[lni, lnJ], toPOV)
>					op2=THIS.xyzToPix(THIS.aPoints[lni+1, lnJ], toPOV)
>					oGFX.DrawLine(loPen, oP1.x, oP1.Y, op2.x, op2.Y)
>				ENDFOR
>			ENDFOR
>
>			oBMP.SAVE(tcPng,.Imaging.ImageFormat.png)
>		ENDWITH
>	ENDPROC
>
>*---------------------------------------------------
>	FUNCTION MakeDup(toObj)
>		LOCAL loRec, lni, aMm[1]
>		loRec=CREATEOBJECT("empty")
>		FOR lni=1 TO AMEMBERS(aMm, toObj)
>			ADDPROPERTY(loRec, aMm[lni], GETPEM(toObj, aMm[lni]))
>		ENDFOR
>		RETURN loRec
>
>	PROCEDURE cmd1.CLICK
>		THIS.PARENT.img1.VISIBLE= NOT THIS.PARENT.img1.VISIBLE
>	ENDPROC
>
>*---------------------------------------------------
>	PROCEDURE DESTROY()
>*-- dn 2012/06/20
>		CLEAR EVENTS
>
>*---------------------------------------------------
>	PROCEDURE xyzToPix(to3, toPOV)
>		LOCAL xFactor, lnTx, lnTy, lnXR, lnYR
>* first parameter has 3 coordinates, 2nd also (the point of view)
>		lnAngle=toPOV.angle
>		lnCos=COS(lnAngle)
>		lnSin=SIN(lnAngle)
>* rotate the POV around z axis
>		lnXR=toPOV.x*lnCos+toPOV.Y*lnSin
>		lnYR=toPOV.x*lnSin-toPOV.Y*lnCos
>		lnZR=topov.z
>
>* project to z=0 plane
>		lnSq=lnXR * lnXR + lnYR * lnYR + lnZR * lnZR
>		xFactor = lnSq / (lnSq - lnXR * to3.x - lnYR * to3.Y - lnZR * to3.z)
>		lnTx=lnXR + xFactor*(to3.x-lnXR)
>		lnTy=lnYR + xFactor*(to3.Y-lnYR)
>* rotate by 45 degrees
>		lnGx=(lntx+lnty)*0.7
>		lnGy=(lntx-lnty)*0.7
>* now adjust for graphics
>		lnPxX=hWidth/2 + (lnGx+.0)*THIS.pixelsPer1
>		lnPxY=hHeight/2 + (.0-lnGy)*THIS.pixelsPer1
>		o=make3(lnPxX, lnPxY, 0)
>		RETURN o
>*---------------------------------------------------
>	PROCEDURE PopulateCursor()
>		LOCAL lnAngle, lnCos, lnSin, lni, lnx, lnJ, lny, lnZ, lnXR, lnYR, xFactor, lnTx, lnTy
>*-- dn 2012/06/22
>
>		FOR lni=1 TO 41
>			lnx=lni/20 - 1.05
>			FOR lnJ=1 TO 41
>				lny=lnJ/20 - 1.05
>* calculate in absolute coordinates
>*!*					lnZ=.4*lnx*lnx+0.2* lny*lny+.2*x*(Y-0.3*x)
>*!*					lnZ=int(3*x*y-2)
>*				lnZ=EXP((2*lnx-.2*lnY)/(2+.1*lnx-.2*lnY))
>				lnZ=-max(.5*SIN((1-2*lnx)*(2-3*lny)+lnx*lnx-lny*lny), 0)
>*				lnz=int(4* lnx*lnx+4*lny*lny)/4
>				THIS.aPoints[lni, lnj]=make3(lnx, lny, lnZ)
>			ENDFOR
>		ENDFOR
>ENDDEFINE
>
>
>PROCEDURE make3(tnx, tny, tnz)
>	LOCAL o
>	o=CREATEOBJECT("empty")
>	ADDPROPERTY(o, "x",tnx)
>	ADDPROPERTY(o, "Y",tny)
>	ADDPROPERTY(o, "z",tnz)
>	RETURN o
>
Greg Reichert
Précédent
Répondre
Fil
Voir

Click here to load this message in the networking platform