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

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

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

Beitrag 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 :?:
Zuletzt geändert von AUGE_OHR am So, 16. Dez 2018 3:03, insgesamt 1-mal geändert.
gruss by OHR
Jimmy
Benutzeravatar
mikehoffmann
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 133
Registriert: Mo, 21. Sep 2015 16:22
Hat sich bedankt: 1 Mal
Danksagung erhalten: 18 Mal

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

Beitrag von mikehoffmann »

Polygon.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

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

Beitrag 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 :?:
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

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

Beitrag von AUGE_OHR »

also ich bekomme mit PlgBlt nur ein Parallelogramm raus :(
.
KB_Parallelogramm.jpg
KB_Parallelogramm.jpg (126.45 KiB) 10930 mal betrachtet
ich kann es zwar weiter "drehen" und "zerren" aber es bleibt ein Parallelogramm :banghead:
gruss by OHR
Jimmy
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

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

Beitrag von Tom »

also ich bekomme mit PlgBlt nur ein Parallelogramm raus
Und es sieht auch noch scheiße aus. 8)
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

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

Beitrag 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) 10877 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
Dateianhänge
TRAPEZ01.ZIP
Source "pure" Xbase++
(68.95 KiB) 291-mal heruntergeladen
gruss by OHR
Jimmy
Benutzeravatar
mikehoffmann
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 133
Registriert: Mo, 21. Sep 2015 16:22
Hat sich bedankt: 1 Mal
Danksagung erhalten: 18 Mal

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

Beitrag von mikehoffmann »

DirectX, GDI+ und OpenGL benötigen kein Punktnetz. Da geht das um Volldampf voraus.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

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

Beitrag von Tom »

Und noch edler und einfacher geht's mit HTML und CSS. :wink:
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

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

Beitrag 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) 10806 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) 10806 mal betrachtet
ich möchte bis zum Bottom also Höhe "null" ... da fehlt was in der "Formel" ... :-k
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

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

Beitrag 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) 10780 mal betrachtet
KEYKIP20.JPG
KEYKIP20.JPG (54.31 KiB) 10780 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
gruss by OHR
Jimmy
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

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

Beitrag von Wolfgang Ciriack »

KEYKIP30.JPG erinnert mich irgendwie an Star Wars....
Viele Grüße
Wolfgang
Benutzeravatar
mikehoffmann
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 133
Registriert: Mo, 21. Sep 2015 16:22
Hat sich bedankt: 1 Mal
Danksagung erhalten: 18 Mal

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

Beitrag von mikehoffmann »

Ja, war das nicht Episode 4712: Auf der Suche nach Ge-De-I-Ritter.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

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

Beitrag 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 ...
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

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

Beitrag 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
Dateianhänge
FlyKey.zip
(1.99 MiB) 310-mal heruntergeladen
gruss by OHR
Jimmy
Benutzeravatar
Hans Zethofer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 278
Registriert: Fr, 27. Jan 2006 8:29
Wohnort: 2700 Wiener Neustadt
Hat sich bedankt: 1 Mal
Kontaktdaten:

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

Beitrag von Hans Zethofer »

=D> =D> =D>
_____________
lg
Hans
Antworten