如何使用Autoit将曲线重绘为Photoshop?

问题描述 投票:1回答:1

我想绘制一条特定的曲线到Photoshop或mspaint。应该保存此绘图操作,以便以完全相同的方式重绘该曲线。我怎么能用Autoit做到这一点?有记录和播放机制吗?据我所知,AU3录音机不再可用。

Photoshop就是一个例子。我希望能够为不同的目的和程序做那种绘图记录。也许对于在线图像编辑器或其他东西。

我对Autoit还不熟悉。我不期望一个完整的代码示例,也许你可以给我一个想法 - 这将是非常有帮助的。


目前我尝试了一些鼠标功能,如MouseDownMouseMove等,这很有趣,但我真的没有记录和重绘这些鼠标动作的概念。


如果我需要澄清更多请告诉我 - 我会尽力准确。

drawing autoit
1个回答
0
投票

我建议使用两个脚本,一个用于录制,第二个用于重放录制的操作。

录音代码:

; declaration
Global $sFileCoordinates            = @ScriptDir & '\RecordedMouseMoveCoordinates.txt'
Global $iRecordingDurationInSeconds = 10
Global $iXSave, $iYSave

; functions
Func _recordMouseMoveCoordinatesToFile()
    Local $aPos = MouseGetPos()

    If $aPos[0] <> $iXSave Or $aPos[1] <> $iYSave Then
        FileWrite($hFile, $aPos[0] & ',' & $aPos[1] & @CRLF)

        Local $aPos = MouseGetPos()
        $iXSave = $aPos[0]
        $iYSave = $aPos[1]
    EndIf

    Sleep(80)
EndFunc

; processing
Sleep(4000) ; wait 4 seconds to place your mouse to the start position

Global $hFile  = FileOpen($sFileCoordinates, 1 + 256)
Global $hTimer = TimerInit()

While Round((TimerDiff($hTimer) / 1000), 1) <= $iRecordingDurationInSeconds
    ToolTip(Round((TimerDiff($hTimer) / 1000), 1))
    _recordMouseMoveCoordinatesToFile()
WEnd

FileClose($hFile)

录制将在4秒延迟后开始。这应该允许您将鼠标移动到绘图操作的起点。

Global $iRecordingDurationInSeconds = 10表示您的绘图操作应在10秒内完成(工具提示显示剩余秒数)。这里是秒脚本。

代码重绘曲线:

; declaration
Global $sFileCoordinates = @ScriptDir & '\RecordedMouseMoveCoordinates.txt'

; functions
Func _getFileContent($sFile)
    Local $hFile        = FileOpen($sFile, 256)
    Local $sFileContent = FileRead($hFile)
    FileClose($hFile)
    Return $sFileContent
EndFunc

Func _drawRecordedMouseMoveCoordinatesFromFile($sContent)
    Local $aFileContent = StringSplit($sContent, @CRLF, 1)

    Local $iX = StringSplit($aFileContent[1], ',')[1]
    Local $iY = StringSplit($aFileContent[1], ',')[2]

    MouseMove($iX, $iY, 4)
    MouseDown('left')

    For $i = 1 To $aFileContent[0] Step 1
        If $aFileContent[$i] <> '' Then
            Local $iX = StringSplit($aFileContent[$i], ',')[1]
            Local $iY = StringSplit($aFileContent[$i], ',')[2]

            MouseMove($iX, $iY, 4)
        EndIf
    Next

    MouseUp('left')
EndFunc

; processing
Sleep(2000) ; wait 2 seconds till start

Global $sFileContent = _getFileContent($sFileCoordinates)
_drawRecordedMouseMoveCoordinatesFromFile($sFileContent)

启动延迟为2秒。所有保存的坐标将以记录的相同方式执行。它从MouseDown('left')开始,然后鼠标移动到MouseUp('left')

注意:

由于坐标与窗口无关,因此这种方法并不十分强大。有关更多信息,请参阅帮助文件中的Opt('MouseCoordMode', 0|1|2)。如果你想绘制的不仅仅是一条线或曲线,这种方法并不是最好的。但是,由于您的问题仅描述了该要求,因此应该没问题。

© www.soinside.com 2019 - 2024. All rights reserved.