Seite 2 von 2

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

Verfasst: 26.04.2012 00:28
von funkheld
Das brauche ich noch.
Zue Zeit kommen nur total verrauschte Bilder.

Danke.
Gruss

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

Verfasst: 26.04.2012 09:48
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.