#include <GUIConstants.au3>
#include <FileConstants.au3>
#include <GDIPlus.au3>
_CropImage()
Func _CropImage()
Local $sFileOpen, $hImage, $aXYWH, $hCropImage, $sFileSave
$sFileOpen = FileOpenDialog("Выберите изображение", "", "Изображения (*.jpg;*.jpeg;*.png;*.bmp;*.gif;*.tiff)", $FD_FILEMUSTEXIST + $FD_PATHMUSTEXIST)
If @error Then Exit
_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile($sFileOpen)
If @error Then Exit -1
$aXYWH = _CropBox(0, 0, _GDIPlus_ImageGetWidth($hImage), _GDIPlus_ImageGetHeight($hImage))
If @error Then Exit
$aPixelFormat = _GDIPlus_ImageGetPixelFormat($hImage)
If @error Then Exit -2
$hCropImage = _GDIPlus_BitmapCloneArea($hImage, $aXYWH[0], $aXYWH[1], $aXYWH[2], $aXYWH[3], $aPixelFormat[0])
_GDIPlus_ImageDispose($hImage)
$sFileSave = FileSaveDialog("Сохранить как", "", "Изображения (*.jpg;*.jpeg;*.png;*.bmp;*.gif;*.tiff)", $FD_PATHMUSTEXIST + $FD_PROMPTOVERWRITE, $sFileOpen)
If @error Then Exit
_GDIPlus_ImageSaveToFile($hCropImage, $sFileSave)
_GDIPlus_ImageDispose($hCropImage)
_GDIPlus_Shutdown()
EndFunc ;==>_CropImage
Func _CropBox($nX = 0, $nY = 0, $nW = 0, $nH = 0)
Local $aXYWH[4], $nInpX, $nInpY, $nInpW, $nInpH, $nBtnOK
GUICreate("Обрезка изображения", 190, 95)
$nInpX = GUICtrlCreateInput(0, 10, 5, 80, 20, BitOR($GUI_SS_DEFAULT_INPUT, $ES_NUMBER))
GUICtrlSendMsg(-1, $EM_SETCUEBANNER, True, "X")
GUICtrlSetTip(-1, "X")
$nInpY = GUICtrlCreateInput(0, 100, 5, 80, 20, BitOR($GUI_SS_DEFAULT_INPUT, $ES_NUMBER))
GUICtrlSendMsg(-1, $EM_SETCUEBANNER, True, "Y")
GUICtrlSetTip(-1, "Y")
$nInpW = GUICtrlCreateInput($nW, 10, 30, 80, 20, BitOR($GUI_SS_DEFAULT_INPUT, $ES_NUMBER))
GUICtrlSendMsg(-1, $EM_SETCUEBANNER, True, "Ширина")
GUICtrlSetTip(-1, "Ширина")
$nInpH = GUICtrlCreateInput($nH, 100, 30, 80, 20, BitOR($GUI_SS_DEFAULT_INPUT, $ES_NUMBER))
GUICtrlSendMsg(-1, $EM_SETCUEBANNER, True, "Высота")
GUICtrlSetTip(-1, "Высота")
$nBtnOK = GUICtrlCreateButton("OK", 45, 60, 100, 25)
GUICtrlSetState(-1, $GUI_DEFBUTTON)
GUISetState()
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
GUIDelete()
Return SetError(1, 0, 0)
Case $nBtnOK
$aXYWH[0] = GUICtrlRead($nInpX)
$aXYWH[1] = GUICtrlRead($nInpY)
$aXYWH[2] = GUICtrlRead($nInpW)
$aXYWH[3] = GUICtrlRead($nInpH)
GUIDelete()
Return $aXYWH
EndSwitch
WEnd
EndFunc ;==>_CropBox