Автор Тема: Объединение фотофайлов - с помощью UDF GDIP  (Прочитано 238 раз)

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

Эта тема содержит сообщение, помеченное как лучший ответ. Кликните здесь для перехода к этому сообщению.

Оффлайн Visors [?]

  • Новичок
  • *
  • Сообщений: 43
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Здравствуйте.
Появился вопрос, касаемо UDF GDIP, которое описывают как - мощное дополнение к GDIPlus.au3
В общем это вещь, которая работает с графикой.

У меня имеется  четыре рисунка jpg (1.jpg,2.jpg,3.jpg,4.jpg)- одинакового размера по ширине и высоте.

Как кодом autoit их надо соединить последовательно - в два ряда ?
Первый и второй рисунок - это верхний ряд.
Третий и четвертый рисунки - это нижний ряд.
(нажмите для показа/скрытия)
rgho.st/7nXvy757R

Вот ссылка на саму UDF GDIP:
http://autoit-script.ru/index.php?topic=1384.0
« Последнее редактирование: Ноябрь 09, 2018, 21:15:56 от Visors »

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

Объединение фотофайлов - с помощью UDF GDIP
« Отправлен: Ноябрь 09, 2018, 21:05:43 »

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3973
  • Репутация: 1055
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Объединение фотофайлов - с помощью UDF GDIP
« Ответ #1, Отправлен: Ноябрь 10, 2018, 01:43:30 »
Visors  [?]
Цитировать
GDIP, которое описывают как - мощное дополнение к GDIPlus.au3
В последней версии AutoIt практически вся GDIP находится в GDIPlus. Да и в ранних версиях GDIPlus достаточно функций для решения вашей проблемы.

Цитировать
Как кодом autoit их надо соединить последовательно - в два ряда ?
Загрузить изображения и узнать их размеры (если размеры одинаковые, то достаточно одного файла), рассчитать размер общего рисунка и создать его, скопировать рисунки из файлов на общий битмап в соответствующие координаты, сохранить полученное изображение. Вот список необходимых функций (для каждой есть пример в справке)
Код: AutoIt [Выделить]

Оффлайн Visors [?]

  • Новичок
  • *
  • Сообщений: 43

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Объединение фотофайлов - с помощью UDF GDIP
« Ответ #2, Отправлен: Ноябрь 12, 2018, 18:51:14 »
InnI, а как использовать функцию BitmapCreateFromScan0 ?

Ссылка на _GDIPlus_BitmapCreateFromScan0() - пишет что страница отсутствует.

Онлайн sngr [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 892
  • Репутация: 359
    • Награды
  • Версия AutoIt: 3.3.8.1
Re: Объединение фотофайлов - с помощью UDF GDIP
« Ответ #3, Отправлен: Ноябрь 12, 2018, 20:40:55 »
Код: AutoIt [Выделить]
$hStream = _WinAPI_CreateStreamOnHGlobal($hData)
        $hImage = _GDIPlus_BitmapCreateFromStream($hStream)
        $NewImage = _GDIPlus_BitmapCreateFromScan0($iWidth / 3, $iHeight / 3, 0, _GDIPlus_ImageGetPixelFormatEx($hImage))
        $hGraphics = _GDIPlus_ImageGetGraphicsContext($NewImage)
        _GDIPlus_GraphicsSetInterpolationMode($hGraphics, 7)
        _GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hImage, 0, 0, $iWidth, $iHeight, 0, 0, $iWidth / 3, $iHeight / 3)
        $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($NewImage)
        _GDIPlus_GraphicsDispose($hGraphics)
        _GDIPlus_ImageDispose($NewImage)
        _GDIPlus_ImageDispose($hImage)
Func _GDIPlus_ImageGetPixelFormatEx($hImage)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipGetImagePixelFormat", "ptr", $hImage, "int*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aResult[2]
EndFunc   ;==>_GDIPlus_ImageGetPixelFormatEx
Func _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight, $iStride = 0, $iPixelFormat = 0x0026200A, $pScan0 = 0)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iWidth, "int", $iHeight, "int", $iStride, "int", $iPixelFormat, "ptr", $pScan0, "ptr*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aResult[6]
EndFunc   ;==>_GDIPlus_BitmapCreateFromScan0


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

Re: Объединение фотофайлов - с помощью UDF GDIP
« Ответ #3 Отправлен: Ноябрь 12, 2018, 20:40:55 »

Оффлайн Visors [?]

  • Новичок
  • *
  • Сообщений: 43

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Объединение фотофайлов - с помощью UDF GDIP
« Ответ #4, Отправлен: Ноябрь 13, 2018, 08:42:24 »
sngr что-то не работает.
Выдает ошибку:

$hStream = _WinAPI_CreateStreamOnHGlobal($hData)
$hStream = ^ ERROR

Онлайн sngr [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 892
  • Репутация: 359
    • Награды
  • Версия AutoIt: 3.3.8.1
Re: Объединение фотофайлов - с помощью UDF GDIP
« Ответ #5, Отправлен: Ноябрь 13, 2018, 16:51:37 »
Это пример _GDIPlus_BitmapCreateFromScan0, тебе $hImage нужно получать из _GDIPlus_ImageLoadFromFile()

Оффлайн Visors [?]

  • Новичок
  • *
  • Сообщений: 43

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Объединение фотофайлов - с помощью UDF GDIP
« Ответ #6, Отправлен: Ноябрь 13, 2018, 18:58:34 »
sngr
Теперь выдает ошибку:
$hStream = _GDIPlus_ImageLoadFromFile("C:\1.jpg")
$hStream = ^ ERROR

(нажмите для показа/скрытия)

Помечен как лучший ответ пользователем Visors Отправлен Ноябрь 13, 2018, 20:57:18

Онлайн sngr [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 892
  • Репутация: 359
    • Награды
  • Версия AutoIt: 3.3.8.1
Re: Объединение фотофайлов - с помощью UDF GDIP
« Ответ #7, Отправлен: Ноябрь 13, 2018, 20:39:13 »
Код: AutoIt [Выделить]
#include <GDIPlus.au3>
_GDIPlus_Startup()
$hImage1 = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\1.jpg")
$hImage2 = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\2.jpg")
$hImage3 = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\3.jpg")
$hImage4 = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\4.jpg")
$sCLSID = _GDIPlus_EncodersGetCLSID("JPG")
$iX = _GDIPlus_ImageGetWidth($hImage1)
$iY = _GDIPlus_ImageGetHeight($hImage1)
$GC = _GDIPlus_ImageGetGraphicsContext($hImage1)
$newBmp = _GDIPlus_BitmapCreateFromGraphics($iX*2, $iY*2, $GC)
$newGC = _GDIPlus_ImageGetGraphicsContext($newBmp)
_GDIPlus_GraphicsDrawImageRect($newGC, $hImage1, 0, 0, $iX, $iY)
_GDIPlus_GraphicsDrawImageRect($newGC, $hImage2, $iX, 0, $iX, $iY)
_GDIPlus_GraphicsDrawImageRect($newGC, $hImage3, 0, $iY, $iX, $iY)
_GDIPlus_GraphicsDrawImageRect($newGC, $hImage4,$iX, $iY, $iX, $iY)
_GDIPlus_ImageSaveToFileEx($newBmp, @ScriptDir & "\1234.jpg", $sCLSID)
_GDIPlus_GraphicsDispose($newBmp)
_GDIPlus_GraphicsDispose($GC)
_GDIPlus_ImageDispose($hImage1)
_GDIPlus_ImageDispose($hImage2)
_GDIPlus_ImageDispose($hImage3)
_GDIPlus_ImageDispose($hImage4)
_GDIPlus_Shutdown()


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

Re: Объединение фотофайлов - с помощью UDF GDIP
« Ответ #7 Отправлен: Ноябрь 13, 2018, 20:39:13 »

Оффлайн Visors [?]

  • Новичок
  • *
  • Сообщений: 43

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Объединение фотофайлов - с помощью UDF GDIP
« Ответ #8, Отправлен: Ноябрь 13, 2018, 20:56:44 »
sngr огромное спасибо вам.
Теперь все объединяет.

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

Re: Объединение фотофайлов - с помощью UDF GDIP
« Ответ #8 Отправлен: Ноябрь 13, 2018, 20:56:44 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
15 Ответов
19686 Просмотров
Последний ответ Февраль 14, 2017, 01:34:07
от Alofa
7 Ответов
4656 Просмотров
Последний ответ Апрель 05, 2010, 12:55:24
от amel27
2 Ответов
5405 Просмотров
Последний ответ Январь 27, 2011, 04:46:48
от Yashied
2 Ответов
2134 Просмотров
Последний ответ Март 13, 2012, 02:36:00
от LightDemon
4 Ответов
3611 Просмотров
Последний ответ Август 22, 2012, 14:44:37
от unsend
9 Ответов
7692 Просмотров
Последний ответ Июнь 27, 2013, 17:33:23
от gregaz
4 Ответов
2069 Просмотров
Последний ответ Август 07, 2013, 16:10:40
от Zalman1980
1 Ответов
2519 Просмотров
Последний ответ Апрель 27, 2014, 00:37:00
от joiner
1 Ответов
6032 Просмотров
Последний ответ Июнь 18, 2015, 11:12:32
от Yashied
4 Ответов
479 Просмотров
Последний ответ Апрель 10, 2018, 19:21:57
от RipVanWinkel