|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] WinApi, Как сохранить GDI регион на жесткий диск? |
|
[решено] WinApi, Как сохранить GDI регион на жесткий диск?
|
Пользователь Сообщения: 135 |
Возник интерес создать сложный GDI регион на основе изображения(bitmap), регион создал, но не смотря на все ухищрения, скорость создания региона оставляет желать лучшего.
Пример сканирования: Сканировать изображение при каждом запуске скрипта, думаю, плохая идея. Вопрос: Как сохранить созданный регион в файл, но самое главное как его потом загружать? P.S. Я знаю что при загрузке и сохранении региона, используются функции GetRegionData и ExtCreateRegion, синтаксис которых мне тоже непонятен. |
|
------- Отправлено: 18:23, 09-09-2009 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата Diamond:
Func _RegionSave($hRgn, $sFile) Local $aRet, $tBuf, $hFile, $iErr $aRet = DllCall($gdi32dll, "uint", "GetRegionData", "hwnd", $hRgn, "dword", 0, "ptr", 0) If $aRet[0]=0 Then Return SetError(2, 1, False) $tBuf = DllStructCreate("byte["& $aRet[0] &"]") $aRet = DllCall($gdi32dll, "uint", "GetRegionData", "hwnd", $hRgn, "dword", $aRet[0], "ptr", DllStructGetPtr($tBuf)) If $aRet[0]=0 Then Return SetError(2, 2, False) $hFile = FileOpen($sFile, 18) If $hFile=-1 Then Return SetError(1, 1, False) $iErr = FileWrite($hFile, DllStructGetData($tBuf,1)) FileClose($hFile) Return SetError($iErr, 2, False) EndFunc Func _RegionLoad($sFile) Local $aRet, $tBuf, $hFile, $bFile, $iErr $hFile = FileOpen($sFile, 16) If $hFile=-1 Then Return SetError(1, 0, 0) $bFile = FileRead ($hFile) $zFile = BinaryLen($bFile) FileClose($hFile) $tBuf = DllStructCreate("byte["& $zFile &"]") DllStructSetData($tBuf, 1, $bFile) $aRet = DllCall($gdi32dll, "hwnd", "ExtCreateRegion", "ptr", 0, "uint", $zFile, "ptr", DllStructGetPtr($tBuf)) If $aRet=0 Then Return SetError(2, 0, 0) Return $aRet[0] EndFunc Цитата Diamond:
P.S. по ходу полученный регион отличается от исходной картинки, т.к. каждая строка развертки заменяется на две строки (прямоугольник), это так? |
||
Отправлено: 05:41, 10-09-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 135
|
Профиль | Отправить PM | Цитировать amel27, Супер! Просто нет слов.
![]() Цитата amel27:
Цитата amel27:
|
||
------- Отправлено: 07:20, 10-09-2009 | #3 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата Diamond:
и еще вопрос - почему ты используешь SetRectRgn вместо CreateRectRgn? |
|
Отправлено: 08:07, 10-09-2009 | #4 |
Пользователь Сообщения: 135
|
Профиль | Отправить PM | Цитировать Цитата amel27:
Цитата amel27:
![]() |
|||
------- Отправлено: 10:05, 10-09-2009 | #5 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Diamond, понятно... а то подумал может так быстрее работает
![]() сделал профилирование твоего скрипта - 95% отбирает GetPixel |
Отправлено: 10:25, 10-09-2009 | #6 |
Пользователь Сообщения: 135
|
Профиль | Отправить PM | Цитировать Цитата amel27:
![]() Цитата amel27:
Нашел статью где автор применяет (на c++ вроде бы) схожий с моим скриптом принцип создания региона, но вот упоминания о GetPixel я в его коде не нашёл, также там прилагается ссылка на утилиту RegionCreator(почти в самом низу страницы), да и работает она гораздо быстрее чем мой скрипт. http://sources.ru/cpp/bitmap/regions.shtml |
||
------- Отправлено: 12:16, 10-09-2009 | #7 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Diamond, да, там все крутится вокруг GetDIBits()
|
Отправлено: 12:37, 10-09-2009 | #8 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Установка - [решено] Как отформатировать жесткий диск, если с загрузочного диска установка не начинается. | Мартиша | Microsoft Windows 2000/XP | 17 | 15-11-2009 22:32 | |
Debian/Ubuntu - [решено] Как правильно установить Knoppix 5.3.1 на жесткий диск | CJ F.A.N. | Общий по Linux | 14 | 17-07-2009 02:02 | |
Как вылечить жесткий диск | alex77754 | Microsoft Windows 2000/XP | 7 | 11-12-2006 19:26 | |
Как форматировать жесткий диск? | lag | Хочу все знать | 4 | 03-03-2006 02:20 | |
как установить жесткий диск? | Guest | Хочу все знать | 1 | 28-05-2004 15:08 |
|