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,
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]}})
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 (126.45 KiB) 10939 mal betrachtet
ich kann es zwar weiter "drehen" und "zerren" aber es bleibt ein Parallelogramm
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.
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.
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 ...
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 (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.
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 (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 (85.68 KiB) 10815 mal betrachtet
ich möchte bis zum Bottom also Höhe "null" ... da fehlt was in der "Formel" ...
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
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 ...
- KEYKIP10.JPG (93.34 KiB) 10789 mal betrachtet
- KEYKIP20.JPG (54.31 KiB) 10789 mal betrachtet
---
neue Idee
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