|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Проблема с изображением |
|
Проблема с изображением
|
Старожил Сообщения: 379 |
Профиль | Отправить PM | Цитировать Возникла небольшая проблеммка с использованием рисунка
Как то я уже спрашивал на эту тему, и мне подкинули хороший скриптик плавного появления картинки. Я его подкорректировал под мгновенное появление изображения, но не могу найти как сделать так, чтобы изображение появлялось не посреди экрана, а в координате x,y (0;0), и поверх всех окон + к этому, нужно чтобы изображение растягивалось на весь экран в зависимости от расширения Название файла 3.jpg (кстати, может работать даже с .png) Вот этот кодик: #include <WindowsConstants.au3> #include <GuiConstantsEx.au3> #include <GDIPlus.au3> Global $opacity = 0 $gui = GUICreate("Transparent", 0, 0, -1, -1, $WS_POPUP , $WS_EX_LAYERED) _GDIPlus_Startup () $image = _GDIPlus_ImageLoadFromFile ("3.jpg") SetBitMap ($gui , $image, $opacity) GUISetState() For $i = 0 To 255 Step 255 SetBitmap ($gui, $image, $i) Sleep (30) Next Func SetBitmap($gui, $image, $opacity) $hScrDC = _WinAPI_GetDC (0) $hMemDC = _WinAPI_CreateCompatibleDC ($hScrDC) $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap ($image) $hOld = _WinAPI_SelectObject ($hMemDC, $hBitmap) $tSize = DllStructCreate ($tagSIZE) $pSize = DllStructGetPtr ($tSize ) DllStructSetData ($tSize, "X", _GDIPlus_ImageGetWidth ($image)) DllStructSetData ($tSize, "Y", _GDIPlus_ImageGetHeight ($image)) $tSource = DllStructCreate ($tagPOINT) $pSource = DllStructGetPtr ($tSource) $tBlend = DllStructCreate ($tagBLENDFUNCTION) $pBlend = DllStructGetPtr ($tBlend) DllStructSetData ($tBlend, "Alpha" , $opacity) DllStructSetData ($tBlend, "Format", 1) _WinAPI_UpdateLayeredWindow ($gui, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA) _WinAPI_ReleaseDC (0, $hScrDC) _WinAPI_SelectObject ($hMemDC, $hOld) _WinAPI_DeleteObject ($hBitmap) _WinAPI_DeleteDC ($hMemDC) EndFunc |
|
------- Отправлено: 14:09, 06-02-2010 |
Старожил Сообщения: 206
|
Профиль | Отправить PM | Цитировать Можно так:
#NoTrayIcon #Include <GDIPlus.au3> #Include <GUIConstantsEx.au3> #Include <Icons.au3> #Include <WinAPIEx.au3> #Include <WindowsConstants.au3> _GDIPlus_Startup() $hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\3.jpg') $Width = _GDIPlus_ImageGetWidth($hImage) $Height = _GDIPlus_ImageGetHeight($hImage) ; Увеличиваем/уменьшаем пропорционально $W = @DesktopWidth $H = $Height * $W / $Width If $H < @DesktopHeight Then $H = @DesktopHeight $W = $Width * $H / $Height EndIf ; Растягиваем и обрезаем до размеров экрана картинку $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage) $hFit = _Icons_Bitmap_Resize($hBitmap, $W, $H) $hCrop = _Icons_Bitmap_Crop($hFit, ($W - @DesktopWidth) / 2, ($H - @DesktopHeight) / 2, @DesktopWidth, @DesktopHeight) _WinAPI_DeleteObject($hBitmap) _WinAPI_DeleteObject($hFit) _GDIPlus_ImageDispose($hImage) _GDIPlus_Shutdown() ; $hParent нужен для того, что бы не появлялась иконка в области задач и по Alt-Tab $hParent = GUICreate('', 0, 0, 0, 0, 0, $WS_EX_TOOLWINDOW) $hForm = GUICreate('', @DesktopWidth, @DesktopHeight, 0, 0, BitOR($WS_DISABLED, $WS_POPUPWINDOW), BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST), $hParent) GUISetState() For $i = 0 To 255 Step 5 _SetBitmap($hForm, $hCrop, $i) Sleep(5) Next Sleep(1000) GUIDelete() Func _SetBitmap($hWnd, $hBitmap, $iOpacity) Local $hDC, $hMemDC, $hSv, $pBlend, $tBlend, $pSize, $tSize, $pSource, $tSource $hDC = _WinAPI_GetDC($hWnd) $hMemDC = _WinAPI_CreateCompatibleDC($hDC) $hSv = _WinAPI_SelectObject($hMemDC, $hBitmap) $tSize = _WinAPI_GetBitmapDimension($hBitmap) $pSize = DllStructGetPtr($tSize) $tSource = DllStructCreate($tagPOINT) $pSource = DllStructGetPtr($tSource) $tBlend = DllStructCreate($tagBLENDFUNCTION) $pBlend = DllStructGetPtr($tBlend) DllStructSetData($tBlend, 'Alpha', $iOpacity) DllStructSetData($tBlend, 'Format', 1) _WinAPI_UpdateLayeredWindow($hWnd, $hDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA) _WinAPI_ReleaseDC($hWnd, $hDC) _WinAPI_SelectObject($hMemDC, $hSv) _WinAPI_DeleteDC($hMemDC) EndFunc ;==>_SetBitmap |
Отправлено: 15:05, 06-02-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 60
|
Профиль | Отправить PM | Цитировать Это наверно из-за того, что окно имеет нулевой размер...
вот так уже прикасается к верхнему левому краю: только там еще белая рамка рисуется - ее наверно как-то через BitNOT можно убрать, не знаю - Creator может с этим поможет... ЗЫ: а зачем ты так по "немецки" opasity "подкорректировал"? ставь $opacity = 255 и сделай цикл с выходом через нажатие "{ESC}" |
Отправлено: 15:23, 06-02-2010 | #3 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - HYUNDAI H-LCD3200. проблема с изображением | alibaster | Прочее железо | 1 | 10-03-2009 12:33 | |
Toshiba USB Hybrid TV Tuner, проблема с изображением | sudden | Непонятные проблемы с Железом | 3 | 15-10-2008 01:46 | |
проблема с регистрационным изображением | Fess21 | Хочу все знать | 5 | 01-10-2008 20:27 | |
[решено] Проблема с изображением на мониторе | alk3 | Непонятные проблемы с Железом | 13 | 16-07-2008 00:28 | |
Проблема с изображением | krest | Видео и аудио: обработка и кодирование | 5 | 06-07-2007 12:42 |
|