Trapez bzw. Polygon

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Unsere Datenschutzerklärung wurde aktualisiert. Mit der Nutzung unseres Forums akzeptierst Du unsere Datenschutzerklärung. Du bestätigst zudem, dass Du mindestens 16 Jahre alt bist.

    • Trapez bzw. Polygon

      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

      Brainfuck-Quellcode

      1. 'Testprogramm für GDI-PLUS 'Texturen:
      2. 'Andreas Miethe * Februar 2004
      3. $H windows.ph
      4. $H Functions_GDIPLUS.ph
      5. $H GDIP_Imageging.ph
      6. $I GDIP_Helper.inc
      7. CLS ~GetSysColor(~COLOR_3DFACE)
      8. '----------------------------------------Beispiel 1
      9. DEF @APolygon(3) ! "GDI32","Polygon"
      10. Declare Polygon&,Point#
      11. Dim point#,32
      12. 'ARRAY aufbauen
      13. 'Punkt 1
      14. Long Point#,0=10
      15. Long Point#,4=30
      16. 'Punkt 2
      17. Long Point#,8=100
      18. Long Point#,12=0
      19. 'Punkt 3
      20. Long Point#,16=100
      21. Long Point#,20=80
      22. 'Punkt 4
      23. Long Point#,24=10
      24. Long Point#,28=60
      25. UseBrush 1,@RGB(255,255,0)'Pinsel - Fuellfarbe
      26. @APolygon(%HDC,Point#,4)'Polygon
      27. '-------------------------------------------Beispiel 2
      28. DEF DeleteObject(1) !"GDI32","DeleteObject"
      29. Def CreateBitmap(5) !"GDI32","CreateBitmap"
      30. Def SelectObject(2) !"GDI32","SelectObject"
      31. Declare gdiplusToken&,ImageObject&,GraphicObject&,BrushObject&
      32. gdiplusToken& = InitGDIPlus()'GDIPlus starten
      33. 'Bild laden
      34. Verlauf RGB(255,255,255), RGB(0,0,255), 200,100, 200, 100
      35. ImageObject& = gdipLoadImage($TempDir+"\\S.bmp") 'Pfad anpassen
      36. ~GdipCreateFromHWND(%hWnd,ADDR(GraphicObject&))'alle Graphics-Operationen auf %hWnd
      37. 'Brush erzeugen
      38. ~GdipCreateTexture(ImageObject&,~WrapModeTile,Addr(BrushObject&))
      39. 'Ellipse, mit Brush gefüllt, anzeigen
      40. ~GdipFillEllipseI(GraphicObject&,BrushObject&,200,10,300,200)
      41. ~GdipDeleteBrush(BrushObject&)
      42. ~GdipDisposeImage(ImageObject&)
      43. ~GdipDeleteGraphics(GraphicObject&)
      44. Waitinput
      45. ExitGDIPlus(gdiplusToken&) 'GDIPlus beenden
      46. End
      47. Proc Verlauf
      48. Parameters color1&, color2&, xpos%, ypos%, xsize%, ysize% 'selbsterklärend
      49. Declare StepR!, StepG!, StepB!
      50. StepR! = (GetRValue(color1&) - GetRValue(color2&)) / ysize% 'Farbänderungswert Rot pro Linie
      51. StepG! = (GetGValue(color1&) - GetGValue(color2&)) / ysize% 'Farbänderungswert Grün pro Linie
      52. StepB! = (GetBValue(color1&) - GetBValue(color2&)) / ysize% 'Farbänderungswert Blau pro Linie
      53. MCls 200,200
      54. StartPaint -1
      55. WhileLoop 0,(ysize%-1)
      56. UsePen 0,1,RGB(Int(StepR! * &loop + GetRValue(color2&)), Int(StepG! * &loop + GetGValue(color2&)), Int(StepB! * &loop + GetBValue(color2&)))
      57. Line 0, &loop - xsize%,&loop
      58. EndWhile
      59. StepR! = (GetRValue(color2&) - GetRValue(color1&)) / ysize% 'Farbänderungswert Rot pro Linie
      60. StepG! = (GetGValue(color2&) - GetGValue(color1&)) / ysize% 'Farbänderungswert Grün pro Linie
      61. StepB! = (GetBValue(color2&) - GetBValue(color1&)) / ysize% 'Farbänderungswert Blau pro Linie
      62. WhileLoop 101,(ysize% + 199)
      63. UsePen 0,1,RGB(Int(StepR! * &loop + GetRValue(color2&)), Int(StepG! * &loop + GetGValue(color2&)), Int(StepB! * &loop + GetBValue(color2&)))
      64. Line 0, &loop - xsize%,&loop
      65. EndWhile
      66. EndPaint
      67. ImageObject&=@Create("hPic",0,"&MEMBMP" )
      68. SavePic $TempDir+"\\S.bmp", ImageObject&
      69. EndProc
      Alles anzeigen
    • Habe ich auch probiert, aber der Aufwand ist schon erheblich, da mehrere Trapeze gekoppelt werden müssen.
      Mit der Darstellung auf dem Berechnungsblatt und als Bild abspeichern bin ich auch nicht so recht weiter gekommen. OpenGL:



      Bisher nur als Rechteck, sind es aber nicht, dargestellt:


      als Bild:

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von THFR ()

    • Der gesuchte Befehl war Gdipfillpolygon2I :-)



      Brainfuck-Quellcode

      1. 'Testprogramm für GDI-PLUS 'Texturen:
      2. 'Andreas Miethe * Februar 2004
      3. $H windows.ph
      4. $H Functions_GDIPLUS.ph
      5. $H GDIP_Imageging.ph
      6. $I GDIP_Helper.inc
      7. CLS ~GetSysColor(~COLOR_3DFACE)
      8. '----------------------------------------Beispiel
      9. Declare Polygon&,Point#,y&
      10. y&=6
      11. Dim point#,8*y&
      12. 'ARRAY aufbauen
      13. Long Point#,0=10
      14. Long Point#,4=60
      15. Long Point#,8=300
      16. Long Point#,12=40
      17. Long Point#,16=360
      18. Long Point#,20=0
      19. Long Point#,24=360
      20. Long Point#,28=200
      21. Long Point#,32=300
      22. Long Point#,36=160
      23. Long Point#,40=10
      24. Long Point#,44=140
      25. Declare gdiplusToken&,ImageObject&,GraphicObject&,BrushObject&
      26. gdiplusToken& = InitGDIPlus()'GDIPlus starten
      27. Declare PenColor&,RedPen&
      28. PenColor& = MakeColor(255,255,0,0)
      29. 'Bild laden
      30. Verlauf RGB(255,255,255), RGB(0,0,255), 200,100, 200, 100
      31. ImageObject& = gdipLoadImage($TempDir+"\\S.bmp") 'Pfad anpassen
      32. ~GdipCreateFromHWND(%hWnd,ADDR(GraphicObject&))'alle Graphics-Operationen auf %hWnd
      33. 'Brush erzeugen
      34. ~GdipCreateTexture(ImageObject&,~WrapModeTile,Addr(BrushObject&))
      35. 'Umrandung etwas weicher zeichnen, sieht besser aus
      36. ~GdipSetSmoothingMode(Graphicobject&,~SmoothingModeAntiAlias)
      37. ~GdipCreatePen1(PenColor&,Single(2.0),~UnitPixel,ADDR(RedPen&))
      38. ~GdipSetPenWidth(RedPen&,Single(3.0))
      39. ~GdipSetPenColor(RedPen&,MakeColor(255,0,0))
      40. ~GdipSetPenDashStyle(RedPen&,~DashStyleSolid)
      41. ' Polygon Umrandung
      42. ~GdipDrawpolygonI(GraphicObject&,RedPen&, Point#,y&)
      43. 'Polygon, mit Brush gefüllt, anzeigen
      44. ~Gdipfillpolygon2I(GraphicObject&,BrushObject&, Point#,y&)
      45. ~GdipSetPenWidth(RedPen&,Single(1.0))
      46. ~GdipDrawLineI(GraphicObject&,RedPen&,300,40,300,160)
      47. ~GdipDeleteBrush(BrushObject&)
      48. ~GdipDisposeImage(ImageObject&)
      49. ~GdipDeleteGraphics(GraphicObject&)
      50. Waitinput
      51. ExitGDIPlus(gdiplusToken&) 'GDIPlus beenden
      52. End
      53. Proc Verlauf
      54. Parameters color1&, color2&, xpos%, ypos%, xsize%, ysize% 'selbsterklärend
      55. Declare StepR!, StepG!, StepB!
      56. StepR! = (GetRValue(color1&) - GetRValue(color2&)) / ysize% 'Farbänderungswert Rot pro Linie
      57. StepG! = (GetGValue(color1&) - GetGValue(color2&)) / ysize% 'Farbänderungswert Grün pro Linie
      58. StepB! = (GetBValue(color1&) - GetBValue(color2&)) / ysize% 'Farbänderungswert Blau pro Linie
      59. MCls 200,200
      60. StartPaint -1
      61. WhileLoop 0,(ysize%-1)
      62. UsePen 0,1,RGB(Int(StepR! * &loop + GetRValue(color2&)), Int(StepG! * &loop + GetGValue(color2&)), Int(StepB! * &loop + GetBValue(color2&)))
      63. Line 0, &loop - xsize%,&loop
      64. EndWhile
      65. StepR! = (GetRValue(color2&) - GetRValue(color1&)) / ysize% 'Farbänderungswert Rot pro Linie
      66. StepG! = (GetGValue(color2&) - GetGValue(color1&)) / ysize% 'Farbänderungswert Grün pro Linie
      67. StepB! = (GetBValue(color2&) - GetBValue(color1&)) / ysize% 'Farbänderungswert Blau pro Linie
      68. WhileLoop 101,(ysize% + 199)
      69. UsePen 0,1,RGB(Int(StepR! * &loop + GetRValue(color2&)), Int(StepG! * &loop + GetGValue(color2&)), Int(StepB! * &loop + GetBValue(color2&)))
      70. Line 0, &loop - xsize%,&loop
      71. EndWhile
      72. EndPaint
      73. ImageObject&=@Create("hPic",0,"&MEMBMP" )
      74. SavePic $TempDir+"\\S.bmp", ImageObject&
      75. EndProc
      Alles anzeigen