Автор Тема: обрезка изображения  (Прочитано 128 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн dexforint [?]

  • Новичок
  • *
  • Сообщений: 5
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
обрезка изображения
« Создано: Май 16, 2018, 20:07:35 »
Есть изображение, нужно сделать из него новое изображение(прямоугольное), вырезав из первого прямоугольник, задав 4 числа:
x1,y1 - координаты верхнего левого угла прямоугольника
x2,y2 - координаты нижнего правого угла прямоугольника

Русское сообщество AutoIt

обрезка изображения
« Отправлен: Май 16, 2018, 20:07:35 »

Онлайн Tempo [?]

  • Продвинутый
  • ***
  • Сообщений: 379
  • Репутация: 90
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: обрезка изображения
« Ответ #1, Отправлен: Май 16, 2018, 22:11:56 »
Код: AutoIt [Выделить]
#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
 


Русское сообщество AutoIt

Re: обрезка изображения
« Ответ #1 Отправлен: Май 16, 2018, 22:11:56 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
34 Ответов
17356 Просмотров
Последний ответ Октябрь 11, 2010, 11:19:20
от Sl0n1k911
13 Ответов
8109 Просмотров
Последний ответ Февраль 03, 2015, 19:49:15
от ivanius
2 Ответов
759 Просмотров
Последний ответ Июнь 30, 2014, 02:49:40
от AlexVong
1 Ответов
1294 Просмотров
Последний ответ Апрель 06, 2015, 11:51:10
от WSWR
0 Ответов
1077 Просмотров
Последний ответ Апрель 15, 2015, 12:38:20
от MucaM
1 Ответов
1024 Просмотров
Последний ответ Май 11, 2015, 11:46:26
от madmasles
4 Ответов
1141 Просмотров
Последний ответ Июнь 29, 2015, 12:55:52
от madmasles
0 Ответов
591 Просмотров
Последний ответ Декабрь 16, 2015, 23:22:21
от Yashied
1 Ответов
994 Просмотров
Последний ответ Январь 29, 2016, 17:54:52
от InnI
1 Ответов
903 Просмотров
Последний ответ Апрель 08, 2017, 11:31:01
от InnI