Seite 1 von 1

welche GDI Function macht mir ein Trapez mit Fluchtpunkt. [erledigt]

Verfasst: Do, 13. Dez 2018 6:20
von AUGE_OHR
moin,

Ich hatte es irgendwann mal unabsichtlich aber erinnere nicht mehr die GDI API Function :(

ich habe ein Fenster und will es so "kippen"

Code: Alles auswählen

      ------------------
     /                  \
    /                    \
   /                      \
   ------------------------
wer kennt die GDI Function :?:

Re: welche GDI Function macht mir ein Trapez mit Fluchtpunkt.

Verfasst: Do, 13. Dez 2018 7:59
von mikehoffmann
Polygon.

Re: welche GDI Function macht mir ein Trapez mit Fluchtpunkt.

Verfasst: Do, 13. Dez 2018 8:18
von AUGE_OHR
moin,
mikehoffmann hat geschrieben: Do, 13. Dez 2018 7:59Polygon.
Danke für die Antwort aber ich möchte ein ganzes Fenster / Bitmap damit "bearbeiten"

ich glaube ich hab die Function gefunden : PlgBlt

es geht mit 3 Koordinaten Paar und deren Vertex.
bei einer 1:1 Ansicht (0,0 unten links) hätte man diese 3 Paare

Code: Alles auswählen

    RETURN DrawPlgBlt(oSource,aPos,aSize,oSource,;
           {{aPos[1],aPos[2]},;
            {aPos[1]+aSize[1],aPos[2]},;
            {aPos[1],aPos[2]+aSize[2]}})
https://docs.microsoft.com/en-us/window ... gdi-plgblt
The fourth vertex of the parallelogram (D) is defined by treating the first three points (A, B, and C ) as vectors and computing

Code: Alles auswählen

   D = B +CA
em ... äh ... und wie komme ich jetzt an das Trapez :?:

Re: welche GDI Function macht mir ein Trapez mit Fluchtpunkt.

Verfasst: Do, 13. Dez 2018 8:52
von AUGE_OHR
also ich bekomme mit PlgBlt nur ein Parallelogramm raus :(
.
KB_Parallelogramm.jpg
KB_Parallelogramm.jpg (126.45 KiB) 10939 mal betrachtet
ich kann es zwar weiter "drehen" und "zerren" aber es bleibt ein Parallelogramm :banghead:

Re: welche GDI Function macht mir ein Trapez mit Fluchtpunkt.

Verfasst: Do, 13. Dez 2018 9:11
von Tom
also ich bekomme mit PlgBlt nur ein Parallelogramm raus
Und es sieht auch noch scheiße aus. 8)

Re: welche GDI Function macht mir ein Trapez mit Fluchtpunkt.

Verfasst: Fr, 14. Dez 2018 6:24
von AUGE_OHR
hi Tom,
Tom hat geschrieben: Do, 13. Dez 2018 9:11 Und es sieht auch noch scheiße aus. 8)
das Verzerrungen mit GDI nicht gut aussehen war mir schon klar.
wenn man nun viele solche GDI Befehle in kleinen Schritten ausführt erhält man eine Animation ... :idea:

ich habe in Richtung GDI weiter gesucht aber das Trapez Problem ist wohl nicht neu ... auch andere hatten die Idee :)
mit GDIplus würde es wohl gehen aber das wäre in DOT Net

dann hab ich was gelesen was zwar (extrem) langsam ist aber im Prinzip funktioniert : jeden Pixel lesen / setzen

Code: Alles auswählen

   FOR nY := 1 TO nYSize
      FOR nX := 1 TO nXSize
         nPixel := GetPixel(nHDC2,nX-1,nY-1)

         xPos := nX + ( ??? )
         SetPixelV(nHDC2,xPos,nY,nPixel)
      NEXT
   NEXT
da ein Trapez entstehen soll ist also die X-Position beim setzen "anders" als im Original.

ein Beispiel das ich gefunden habe hatte diese "Formel"

Code: Alles auswählen

  for y:=0 to Hoehe do
    for x:=0 to Breite do
      begin
        links:=dxOben-Round(Faktor1*y);
        Faktor2:=(Breite-2*links)/Breite;
        Farbe:=Image1.Canvas.Pixels[links+Round(x*Faktor2),y];
        Image2.Canvas.Pixels[x,y]:=Farbe;
      end;
GetSet_Pixel.jpg
GetSet_Pixel.jpg (208.88 KiB) 10886 mal betrachtet
das ist aber nicht die Optik die ich haben möchte ... unabhängig von der Qualität.
wer kann mir bei der "Formel" weiter helfen, Danke

anbei Source

Re: welche GDI Function macht mir ein Trapez mit Fluchtpunkt.

Verfasst: Fr, 14. Dez 2018 10:44
von mikehoffmann
DirectX, GDI+ und OpenGL benötigen kein Punktnetz. Da geht das um Volldampf voraus.

Re: welche GDI Function macht mir ein Trapez mit Fluchtpunkt.

Verfasst: Fr, 14. Dez 2018 11:11
von Tom
Und noch edler und einfacher geht's mit HTML und CSS. :wink:

Re: welche GDI Function macht mir ein Trapez mit Fluchtpunkt.

Verfasst: Sa, 15. Dez 2018 0:19
von AUGE_OHR
hi,

wenn Xbase++ das könnte worüber ihr redet würde ich es verwenden ...
bei vielen Aufgaben geht es ja zunächst darum rauszubekommen "wie" etwas funktioniert ... optimieren kann man immer noch.

das auslesen/setzen von einzelnen Pixel dauert zu lange für einen Live Einsatz.
es gibt das Xbase++ Demo \SOURCE\samples\basics\DBBMP\ANIMATE.EXE wo die Bilder "vorbereitet" sind

---

ich habe an der "Formel" weiter gearbeitet und bekomme nun (fast) die gewünschte Trapez Form

Code: Alles auswählen

FUNCTION TT2(nX,nY,nZ,nXSize,nYSize)
LOCAL links   := 0
LOCAL Faktor1 := nZ/20*-1
LOCAL Faktor2 := nZ/20*-1
LOCAL dxOben  := nZ/20*-1   // hm ...
LOCAL xPos    := 0

   links    := dxOben-Round(Faktor1*(nYSize-ny),0)
   Faktor2  := (nXSize-2*links)/nXSize
   xPos     := links+Round(nx*Faktor2,0)

RETURN xPos
für die beiden Faktoren benötigt man Negative Werte um so eine Form zu erhalten
KEYKIP04.JPG
KEYKIP04.JPG (118.14 KiB) 10815 mal betrachtet
soweit so gut aber am Ende läuft er auf einen Fluchtpunkt zu der "oben" am Rand liegt ...
KEYKIP30.JPG
KEYKIP30.JPG (85.68 KiB) 10815 mal betrachtet
ich möchte bis zum Bottom also Höhe "null" ... da fehlt was in der "Formel" ... :-k

Re: welche GDI Function macht mir ein Trapez mit Fluchtpunkt.

Verfasst: Sa, 15. Dez 2018 13:24
von AUGE_OHR
hab jetzt die Bewegung ... aber auch nicht ganz das was ich möchte :^o

ich möchte das oben die Trapez Form entsteht (funktioniert) und das es dann schmäler wird von der Höhe.
nun klebt er am oberen Ende und er wandert von unten nach oben und wird dabei schmäler ... :banghead:
KEYKIP10.JPG
KEYKIP10.JPG (93.34 KiB) 10789 mal betrachtet
KEYKIP20.JPG
KEYKIP20.JPG (54.31 KiB) 10789 mal betrachtet
---
neue Idee :idea:

wenn ich das Bild nun in ein neues Bitmap transferiere und es dabei auf den unten Rand setze ...
leider macht der Code nicht das was ich dachte ... wieso ?

Code: Alles auswählen

FUNCTION BMP2part( oBMP, i ,iMax)
LOCAL oPS := XBPPRESSPACE() :new() :Create()
LOCAL oTiny := XBPBITMAP() :New() :Create()
LOCAL aSize := {oBMP:xSize,oBMP:ySize}
LOCAL nSteps := aSize[2]/iMax

   oTiny:Make( aSize[ 1 ], aSize[ 2 ], oBMP:planes, oBMP:bits )
   oTiny:presSpace( oPS )
   oBMP:Draw( oPS, { 0,         0  , aSize[ 1 ], aSize[ 2 ] },;
                   { 0, nSteps*(i) , aSize[ 1 ], aSize[ 2 ] },, GRA_BLT_BBO_IGNORE )
RETURN oTiny

FUNCTION MachAufZu(lAufZu,iMax,ostat1,oPb1,oPb2,oBMP)
LOCAL i,cFile, oPart
   IF lAufZu = "ZU"
      oPb1:Disable()
      FOR i := 1 TO iMax
         oBMP:Load(, i+999, "JPG" )
         oPart := BMP2part( oBMP, i ,iMax)
         ostat1:SetCaption(oPart)
      NEXT
      oPb2:Enable()
   ELSE
      oPb2:Disable()
      FOR i := iMax TO 1 STEP -1
         oBMP:Load(, i+999, "JPG" )
         oPart := BMP2part( oBMP, i ,iMax)
         ostat1:SetCaption(oPart)
      NEXT
      oPb1:Enable()
   ENDIF
RETURN NIL

Re: welche GDI Function macht mir ein Trapez mit Fluchtpunkt.

Verfasst: Sa, 15. Dez 2018 18:52
von Wolfgang Ciriack
KEYKIP30.JPG erinnert mich irgendwie an Star Wars....

Re: welche GDI Function macht mir ein Trapez mit Fluchtpunkt.

Verfasst: Sa, 15. Dez 2018 20:27
von mikehoffmann
Ja, war das nicht Episode 4712: Auf der Suche nach Ge-De-I-Ritter.

Re: welche GDI Function macht mir ein Trapez mit Fluchtpunkt.

Verfasst: So, 16. Dez 2018 1:35
von AUGE_OHR
Wolfgang Ciriack hat geschrieben: Sa, 15. Dez 2018 18:52 KEYKIP30.JPG erinnert mich irgendwie an Star Wars....
schon witzig wie man manchmal auf Ideen kommt ;)

JA, als ich das OSK programmiert habe hatte ich einen Star Wars Vilm vorher gesehen und dachte mir ...

Re: welche GDI Function macht mir ein Trapez mit Fluchtpunkt. [erledigt]

Verfasst: So, 16. Dez 2018 3:06
von AUGE_OHR
so jetzt hab ich es wie gedacht

Code: Alles auswählen

   // vorher Bitmap auffüllen
   aAAttr[GRA_AA_COLOR] := XBPSYSCLR_DIALOGBACKGROUND
   GraSetAttrArea(oPS, aAAttr )
   GraBox(oPS, {0,0}, {aSize[1],aSize[2]},GRA_FILL  )
   // das ganze nach unten verschieben
   oBMP:Draw( oPS, { 0, 0, aSize[ 1 ], aSize[ 2 ]-((nSteps*i)*1) },;
                   { 0, (nSteps*i)*-1, aSize[ 1 ], aSize[ 2 ]-((nSteps*i)*1) },, GRA_BLT_BBO_IGNORE )
anbei Source / Resource als Demo

Re: welche GDI Function macht mir ein Trapez mit Fluchtpunkt. [erledigt]

Verfasst: Mi, 19. Dez 2018 9:18
von Hans Zethofer
=D> =D> =D>