반응형
Autoit의 PNG를 이용한 투명 이미지를 GUI에 활용하기
Autoit의 경우 GUI에 PNG를 이용하여 투명 이미지를 적용할 수 있다.
이것을 어느 때에 사용하는가 하면, 가량 이미지 위에 또 다른 이미지를 덧 씌울 때, GUI 위에 다른 이미지를 덧씌울 때, 또는 여러 투명도를 가진 PNG를 겹쳐서 하나의 이미지를 완성할 때이다.
나의 경우는 전시물에서 웹카메라로 영상을 입력받는 상태에서 초점을 맞추는데 이용하였다.
이번 샘플은 그러한 것을 해보는 것이다.
준비된 투명도를 가진 PNG 이미지는 다음과 같다.
그리고 Autoit에서는 WinAPI와 그래픽을 다루는 GDI를 활용해서 적용해야 한다. 이를 적용해 주는 것이 WinAPI.au3과 GDIPlus.au3를 포함시켜서 적용하면 된다. 해당 함수를 활용한 적용 샘플 예제는 Autoit에서 제공하고 있으니 이를 활용하면 손쉽게 이용할 수 있다. 응용의 경우 기본적으로 해당 함수를 활용하면 되겠다.
따라서 이를 활용한 아래와 같은 코드로 간략하게 구성할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
#include <GDIPlus.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
Opt("MustDeclareVars", 0)
Global Const $AC_SRC_ALPHA = 1
Global $hGUI, $hImage
$hGUI = GUICreate("Test", 0, 0, '', '', -1, BitOR( $WS_EX_LAYERED, $WS_EX_TOPMOST))
_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile("cir_line.png")
SetBitMap($hGUI, $hImage, 255)
GUISetState()
while 1
$nMSG = GUIGetMsg();
switch $nMSG
case $GUI_EVENT_CLOSE;
_GDIPlus_ImageDispose($hImage);
_GDIPlus_Shutdown();
Exit;
EndSwitch
sleep(10);
WEnd
Func SetBitmap($hGUI, $hImage, $iOpacity)
Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend
$hScrDC = _WinAPI_GetDC(0)
$hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
$hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
$tSize = DllStructCreate($tagSIZE)
$pSize = DllStructGetPtr($tSize )
DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth ($hImage))
DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage))
$tSource = DllStructCreate($tagPOINT)
$pSource = DllStructGetPtr($tSource)
$tBlend = DllStructCreate($tagBLENDFUNCTION)
$pBlend = DllStructGetPtr($tBlend)
DllStructSetData($tBlend, "Alpha" , $iOpacity )
DllStructSetData($tBlend, "Format", $AC_SRC_ALPHA)
_WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
_WinAPI_ReleaseDC (0, $hScrDC)
_WinAPI_SelectObject($hMemDC, $hOld)
_WinAPI_DeleteObject($hBitmap)
_WinAPI_DeleteDC ($hMemDC)
EndFunc
|
cs |
현재 것을 실행하면 해당 이미지가 윈도우 창의 최상위로 떠서 투명도를 가진 GUI로 실행되는 것을 확인할 수 있다.
최종 프로그램이 적용된 결과를 확인해 보면 아래와 같이 나타난다.
반응형
'개발 관련 > SW, App 관련' 카테고리의 다른 글
Unity에서 php를 활용한 웹데이터(text)를 Android 앱에서 읽기 (0) | 2023.06.16 |
---|---|
Unity와 php를 이용한 웹 데이터(text) 읽기 (0) | 2023.06.14 |
Autoit Wrapper 사용하기 (0) | 2023.06.07 |
앱업데이트시 앱콘텐츠 데이터 보안 관련 (0) | 2023.06.03 |
인공지능 챗봇 구글 Bard 사용하기 (0) | 2023.05.22 |
댓글