Что нового

Смена разширения сохраняемого скриншота

muhiw

Новичок
Сообщения
8
Репутация
0
Имеется код:
Код:
#NoTrayIcon
#include <ScreenCapture.au3>

Global $iTimeOut = 30000;таймаут в мсек

HotKeySet('{Esc}', '_Exit')
_MyScreen()
AdlibRegister('_MyScreen', $iTimeOut)

While 1
    Sleep(1000)
WEnd

Func _MyScreen()
    Local $s_Dir = @ScriptDir & '\Screen\', $s_FileName, $f_Cursor = False

    If Not FileExists($s_Dir) Then DirCreate($s_Dir)
    $s_FileName = StringFormat('%s_%s_%s_%s_%s_%s_%s.jpg', @ComputerName, @MDAY, @MON, @YEAR, @HOUR, @MIN, @SEC);имя компьютора
    ;$s_FileName = StringFormat('%s_%s_%s_%s_%s_%s_%s.jpg', StringReplace(@IPAddress1, '.', '_'), @MDAY, @MON, @YEAR, @HOUR, @MIN, @SEC);IP-адрес
    _ScreenCapture_SetJPGQuality(15)
    _ScreenCapture_Capture($s_Dir & $s_FileName, 0, 0, @DesktopWidth, @DesktopHeight, $f_Cursor)
EndFunc   ;==>_MyScreen

Func _Exit()
    Exit
EndFunc   ;==>_Exit

Нужно чтобы расширение сохраняемого скриншота было не *.jpg а любое другое, например *.hft. Также хотелось чтобы можно было снизить разрешение получаемого скриншота а также если можно изменить на более простую функцию ухутшения качества *.jpg.
 
Последнее редактирование модератором:

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
не *.jpg а любое другое, например *.hft
Просто переименуйте файл через
Код:
FileMove()

снизить разрешение получаемого скриншота
Что вы понимаете под разрешением? Если глубину цвета, то см. последний параметр функции
Код:
_GDIPlus_BitmapCloneArea()

изменить на более простую функцию ухутшения качества *.jpg
_ScreenCapture_SetJPGQuality куда уже проще?
 
Автор
M

muhiw

Новичок
Сообщения
8
Репутация
0
Если можно добавте пожалуйста переименовку файла в скрипт, чтобы было понятно. Мне нужно переименовать только разширешие. Что касается разрешения изображения я имел ввиду разрешение экрана, если у меня монитор 1080р, а я бы хотел например снизить разрешение скриншотов до 800х600.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
переименовать только разширешие
Код:
$s_FileName = StringFormat('%s_%s_%s_%s_%s_%s_%s', @ComputerName, @MDAY, @MON, @YEAR, @HOUR, @MIN, @SEC)
_ScreenCapture_SetJPGQuality(15)
_ScreenCapture_Capture($s_Dir & $s_FileName & ".jpg", 0, 0, @DesktopWidth, @DesktopHeight, $f_Cursor)
FileMove($s_Dir & $s_FileName & ".jpg", $s_Dir & $s_FileName & ".hft")

снизить разрешение скриншотов до 800х600
Код:
_GDIPlus_ImageResize()
 
Автор
M

muhiw

Новичок
Сообщения
8
Репутация
0
Огромная просьба, допишите в код пожалуйста смену разрешения до 800х600.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
допишите в код пожалуйста
С подобными просьбами лучше обращаться в

Код:
Func _MyScreen()
    Local $s_Dir = @ScriptDir & '\Screen\', $s_FileName, $f_Cursor = False
    ; снимок с изменением размеров
    Local $hBmp = _ScreenCapture_Capture("", 0, 0, @DesktopWidth, @DesktopHeight, $f_Cursor)
    _GDIPlus_Startup()
    Local $hImg = _GDIPlus_BitmapCreateFromHBITMAP($hBmp)
    _WinAPI_DeleteObject($hBmp)
    Local $hRes = _GDIPlus_ImageResize($hImg, 800, 600) ; уменьшение до 800х600 с искажением пропорций
    ; Local $hRes = _GDIPlus_ImageScale($hImg, 0.5, 0.5) ; уменьшение в два раза с сохранением пропорций
    _GDIPlus_ImageDispose($hImg)
    $hBmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hRes)
    _GDIPlus_ImageDispose($hRes)
    _GDIPlus_Shutdown()
    ; сохранение с переименованием
    If Not FileExists($s_Dir) Then DirCreate($s_Dir)
    $s_FileName = StringFormat('%s_%s_%s_%s_%s_%s_%s', @ComputerName, @MDAY, @MON, @YEAR, @HOUR, @MIN, @SEC)
    _ScreenCapture_SetJPGQuality(15)
    _ScreenCapture_SaveImage($s_Dir & $s_FileName & ".jpg", $hBmp)
    Sleep(333)
    FileMove($s_Dir & $s_FileName & ".jpg", $s_Dir & $s_FileName & ".hft")
EndFunc   ;==>_MyScreen
 
Последнее редактирование:
Автор
M

muhiw

Новичок
Сообщения
8
Репутация
0
Все функционирует. Единственное, столкнулся с проблемой, через каждые 5 скриншотов, один не меняет расширение файла, возможно не успевает или незнаю в чем проблема.
 
Верх