Ich komme nicht weiter, um ein Trapez bzw. Polygon mit Farbverlauf zu erzeugen und als Bild zu speichern.
Versuche mit GDI+ endeten bei den Beispielen von Andreas M.:
Polygon mit Farbe (GDI32)
mit GDI+ nur Rechteck bzw. Elipse
Wie bekomme ich bei GDI32 als Hintergrund ein Bild,
oder wie muß "GdipFillPolygonI" aufgebaut werden,
oder gibt es noch eine andere Lösung?
Gruß Thomas
Code
'Testprogramm für GDI-PLUS 'Texturen:
'Andreas Miethe * Februar 2004
$H windows.ph
$H Functions_GDIPLUS.ph
$H GDIP_Imageging.ph
$I GDIP_Helper.inc
CLS ~GetSysColor(~COLOR_3DFACE)
'----------------------------------------Beispiel 1
DEF @APolygon(3) ! "GDI32","Polygon"
Declare Polygon&,Point#
Dim point#,32
'ARRAY aufbauen
'Punkt 1
Long Point#,0=10
Long Point#,4=30
'Punkt 2
Long Point#,8=100
Long Point#,12=0
'Punkt 3
Long Point#,16=100
Long Point#,20=80
'Punkt 4
Long Point#,24=10
Long Point#,28=60
UseBrush 1,@RGB(255,255,0)'Pinsel - Fuellfarbe
@APolygon(%HDC,Point#,4)'Polygon
'-------------------------------------------Beispiel 2
DEF DeleteObject(1) !"GDI32","DeleteObject"
Def CreateBitmap(5) !"GDI32","CreateBitmap"
Def SelectObject(2) !"GDI32","SelectObject"
Declare gdiplusToken&,ImageObject&,GraphicObject&,BrushObject&
gdiplusToken& = InitGDIPlus()'GDIPlus starten
'Bild laden
Verlauf RGB(255,255,255), RGB(0,0,255), 200,100, 200, 100
ImageObject& = gdipLoadImage($TempDir+"\\S.bmp") 'Pfad anpassen
~GdipCreateFromHWND(%hWnd,ADDR(GraphicObject&))'alle Graphics-Operationen auf %hWnd
'Brush erzeugen
~GdipCreateTexture(ImageObject&,~WrapModeTile,Addr(BrushObject&))
'Ellipse, mit Brush gefüllt, anzeigen
~GdipFillEllipseI(GraphicObject&,BrushObject&,200,10,300,200)
~GdipDeleteBrush(BrushObject&)
~GdipDisposeImage(ImageObject&)
~GdipDeleteGraphics(GraphicObject&)
Waitinput
ExitGDIPlus(gdiplusToken&) 'GDIPlus beenden
End
Proc Verlauf
Parameters color1&, color2&, xpos%, ypos%, xsize%, ysize% 'selbsterklärend
Declare StepR!, StepG!, StepB!
StepR! = (GetRValue(color1&) - GetRValue(color2&)) / ysize% 'Farbänderungswert Rot pro Linie
StepG! = (GetGValue(color1&) - GetGValue(color2&)) / ysize% 'Farbänderungswert Grün pro Linie
StepB! = (GetBValue(color1&) - GetBValue(color2&)) / ysize% 'Farbänderungswert Blau pro Linie
MCls 200,200
StartPaint -1
WhileLoop 0,(ysize%-1)
UsePen 0,1,RGB(Int(StepR! * &loop + GetRValue(color2&)), Int(StepG! * &loop + GetGValue(color2&)), Int(StepB! * &loop + GetBValue(color2&)))
Line 0, &loop - xsize%,&loop
EndWhile
StepR! = (GetRValue(color2&) - GetRValue(color1&)) / ysize% 'Farbänderungswert Rot pro Linie
StepG! = (GetGValue(color2&) - GetGValue(color1&)) / ysize% 'Farbänderungswert Grün pro Linie
StepB! = (GetBValue(color2&) - GetBValue(color1&)) / ysize% 'Farbänderungswert Blau pro Linie
WhileLoop 101,(ysize% + 199)
UsePen 0,1,RGB(Int(StepR! * &loop + GetRValue(color2&)), Int(StepG! * &loop + GetGValue(color2&)), Int(StepB! * &loop + GetBValue(color2&)))
Line 0, &loop - xsize%,&loop
EndWhile
EndPaint
ImageObject&=@Create("hPic",0,"&MEMBMP" )
SavePic $TempDir+"\\S.bmp", ImageObject&
EndProc
Alles anzeigen