Schräglauf von BMP gerade setzen...

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
funkheld
Beiträge: 651
Registriert: 31.12.2009 11:58

Re: Schräglauf von BMP gerade setzen...

Beitrag von funkheld »

Das brauche ich noch.
Zue Zeit kommen nur total verrauschte Bilder.

Danke.
Gruss
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Schräglauf von BMP gerade setzen...

Beitrag von Danilo »

funkheld hat geschrieben:Wie kann man ein Schräglauf stufenweise ausrichten?
Kann mir bitte einer mal ein Beispiel geben?
Probiere es mal damit:

Code: Alles auswählen

EnableExplicit

XIncludeFile "gDrawing.pbi"

Global image, quit, canvas, trackX, trackY
Global shearX.f, shearY.f

Procedure DrawShearedImageAt(_img,_atX.f,_atY.f,_x.f,_y.f,_ShearX.f,_ShearY.f)
    gStartTransform()
        gShearAt(_x,_y,_ShearX,_ShearY)
        gDrawImage(_img,_atX,_atY,ImageWidth(_img),ImageHeight(_img))
    gStopTransform()
EndProcedure

Procedure Draw()
    Protected midX.f = GadgetWidth(canvas)*0.5
    Protected midY.f = GadgetHeight(canvas)*0.5
    If gStartDrawing(CanvasOutput(canvas))
        gClear(RGB(0,0,0))
        DrawShearedImageAt(image,midX-ImageWidth(image)*0.5,midY-ImageHeight(image)*0.5,midX,midY,shearX,shearY)
        gStopDrawing()
    EndIf
EndProcedure

image = LoadImage(#PB_Any,#PB_Compiler_Home+"Examples\Sources\Data\PureBasicLogo.bmp")
If Not image : MessageRequester("ERROR","Unable to load PureBasic logo!") : End : EndIf

If gInit()

    OpenWindow(#PB_Any,0,0,800,600,"gDrawing gShear",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
    canvas = CanvasGadget(#PB_Any,0,20,780,580)
    trackX = TrackBarGadget(#PB_Any,0,0,800,20,0,1000)
    trackY = TrackBarGadget(#PB_Any,780,20,20,560,0,1000,#PB_TrackBar_Vertical)

    SetGadgetState(trackX,500)
    SetGadgetState(trackY,500)

    Draw()

    Repeat
        Select WaitWindowEvent()
            Case #PB_Event_CloseWindow
                quit = #True
            Case #PB_Event_Gadget
                Select EventGadget()
                    Case trackX : shearX = (500-GetGadgetState(trackX))*0.002 : Draw()
                    Case trackY : shearY = (500-GetGadgetState(trackY))*0.002 : Draw()
                EndSelect
        EndSelect
    Until quit = #True

    gEnd()
EndIf
Das LoadImage() anpassen für Dein Bild, dann die obere Trackbar hin und her verschieben.

Wenn das geht, mußt Du das Bild nur noch abspeichern, nachdem das Original richtig geschert
darauf gezeichnet wurde.


Nach Deiner Beschreibung...
funkheld hat geschrieben:So sieht es aus, die "1" sind die Bildpixel versetzt (Schräglauf) durch Fehlerhafte synchonisation (Funkwettereinfluss):
.............1111111111111111111
.................1111111111111111111
.....................1111111111111111111
...........................1111111111111111111
.................................1111111111111111111

die möchte ich alle wieder untereinander setzen :
.............1111111111111111111
.............1111111111111111111
.............1111111111111111111
.............1111111111111111111
.............1111111111111111111
...mußt Du doch nur jede Zeile des Bildes um Wert.f versetzt zeichnen. Wenn Wert.f negativ ist,
werden die unteren Bildzeilen nach links verschoben. Kleine Übung für Dich, ist doch nicht so schwierig.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Antworten