Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Проблема с изображением

Ответить
Настройки темы
Проблема с изображением

Аватара для sashadeg

Старожил


Сообщения: 379
Благодарности: 6

Профиль | Отправить 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

 

Аватара для Yashied

Старожил


Сообщения: 206
Благодарности: 88

Профиль | Отправить 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
Тебе понадобятся следующие библиотеки: Icons.au3 и WinAPIEx.au3

Отправлено: 15:05, 06-02-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Sp01LeR

Пользователь


Сообщения: 60
Благодарности: 13

Профиль | Отправить PM | Цитировать


Это наверно из-за того, что окно имеет нулевой размер...

вот так уже прикасается к верхнему левому краю:
Код: Выделить весь код
$gui = GUICreate("Transparent", 0, 0, 0, 0, $WS_POPUP, $WS_EX_LAYERED)
только там еще белая рамка рисуется - ее наверно как-то через BitNOT можно убрать, не знаю - Creator может с этим поможет...

ЗЫ: а зачем ты так по "немецки" opasity "подкорректировал"?
ставь $opacity = 255 и сделай цикл с выходом через нажатие "{ESC}"

Отправлено: 15:23, 06-02-2010 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Проблема с изображением

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - 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




 
Переход