Oki
Продвинутый
- Сообщения
- 452
- Репутация
- 63
Привожу черновик скрипта, требующего доработки, в комментариях к которому изложены мысли насчёт того, что в нём пока что неправильно, а также какого рода требуется доработка. Собственные попытки разобраться в том, какие требуются дополнительные функции и в каком порядке, пока что не увенчались успехом. Вероятно, мне не хватило деталей в справке.
Код:
#include <GDIPlus.au3>
#include <Color.au3>
$sFileIn = FileOpenDialog("Select an image", "", "Image (*.jpg;*.png;*.bmp;*.gif;*.tif)") ; Предполагается работа с любым графическим форматом.
$sFileOut = FileSaveDialog("Save the result image", "", "All (*.*)") ; Предполагается сохранение в любом графическом формате.
$hTime = TimerInit()
_GDIPlus_Startup()
$hBitmapIn = _GDIPlus_ImageLoadFromFile($sFileIn)
$aDim = _GDIPlus_ImageGetDimension($hBitmapIn)
$iHResolution = _GDIPlus_ImageGetHorizontalResolution($hBitmapIn)
$iVResolution = _GDIPlus_ImageGetVerticalResolution($hBitmapIn)
Dim $aPixelsIn[$aDim[0]][$aDim[1]]
Dim $aPixelsOut[1][1]
For $iCoordX = 0 To $aDim[0] - 1
For $iCoordY = 0 To $aDim[1] - 1
$aPixelsIn[$iCoordX][$iCoordY] = _GDIPlus_BitmapGetPixel($hBitmapIn, $iCoordX, $iCoordY) ; Функция даёт некорректные данные. Вероятно, нужно сменить формат объекта.
Next
Next
_Transform($aPixelsIn, $aPixelsOut)
$iHeightOut = UBound($aPixelsOut, 1)
$iWidthOut = UBound($aPixelsOut, 2)
$hBitmapOut = _GDIPlus_ImageResize($hBitmapIn, $iHeightOut, $iWidthOut) ; Явно не самая подходящая функция, ведь фактически на этом этапе нужен лишь пустой шаблон заданного размера.
For $iCoordX = 0 To $iHeightOut - 1
For $iCoordY = 0 To $iWidthOut - 1
_GDIPlus_BitmapSetPixel($hBitmapOut, $iCoordX, $iCoordY, $aPixelsOut[$iCoordX][$iCoordY]) ; Нет уверенности в том, что функция даст нужный результат. Вероятно, требуются преобразования до и/или после.
Next
Next
_GDIPlus_BitmapSetResolution($hBitmapOut, 2 * $iHResolution, 3 * $iVResolution) ; Установка новой резолюции для примера.
_GDIPlus_ImageSaveToFile($hBitmapOut, $sFileOut)
_GDIPlus_BitmapDispose($hBitmapIn)
_GDIPlus_BitmapDispose($hBitmapOut)
_GDIPlus_Shutdown()
MsgBox(4096, "", "Script terminated in " & TimerDiff($hTime) & " milliseconds.")
Func _Transform(ByRef $aIn, ByRef $aOut) ; Функция обработки только для примера, чтобы было от чего оттолкнуться при попытках запустить скрипт.
$iHeight = UBound($aIn, 1)
$iWidth = UBound($aIn, 2)
ReDim $aOut[$iHeight + 2][$iWidth + 2]
For $iCoordX = 0 To $iHeight + 1
For $iCoordY = 0 To $iWidth + 1
If $iCoordX = 0 Or $iCoordX = $iHeight + 1 Or $iCoordY = 0 Or $iCoordY = $iWidth + 1 Then
$aPixelsOut[$iCoordX][$iCoordY] = 0xFFFFFF
Else
$iColour = $aPixelsIn[$iCoordX - 1][$iCoordY - 1]
$aRGB = _ColorGetRGB($iColour)
For $iIndexRGB = 0 To 2
If $aRGB[$iIndexRGB] > 200 Then
$aRGB[$iIndexRGB] = 200
EndIf
Next
$aPixelsOut[$iCoordX][$iCoordY] = _ColorSetRGB($aRGB)
EndIf
Next
Next
Return(0)
EndFunc
Последнее редактирование: