Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;MAIN GAME STARTS AT LINE 170 "ish"
- #SingleInstance, Force
- #NoEnv
- ; Draw Images
- ;#############################################################################################
- ;#############################################################################################
- ;#############################################################################################
- ;#############################################################################################
- ;#############################################################################################
- If !pToken := Gdip_Startup()
- {
- MsgBox, 48, gdiplus error!, Gdiplus failed to start. Please ensure you have gdiplus on your system
- ExitApp
- }
- pBitmap := Gdip_CreateBitmap(100, 80)
- G := Gdip_GraphicsFromImage(pBitmap)
- Gdip_SetSmoothingMode(G, 4)
- ;Tanks Body
- pBrush := Gdip_BrushCreateSolid(0xff7BD737)
- Gdip_FillRectangle(G, pBrush, 10,17 , 80, 46)
- Gdip_DeleteBrush(pBrush)
- pPen := Gdip_CreatePen(0xff000000, 4)
- Gdip_DrawRectangle(G, pPen, 10, 17, 80, 46)
- Gdip_DeleteBrush(pPen)
- pBrush := Gdip_BrushCreateSolid(0xff479B1B)
- Gdip_FillRectangle(G, pBrush, 17,25 , 20, 30)
- Gdip_DeleteBrush(pBrush)
- pPen := Gdip_CreatePen(0xff000000, 3)
- Gdip_DrawRectangle(G, pPen, 17,25 , 20, 30)
- Gdip_DeleteBrush(pPen)
- pPen := Gdip_CreatePen(0xff000000, 3)
- pBrush := Gdip_BrushCreateSolid(0xff7e7e7e)
- y:= 30
- Loop 3
- {
- Gdip_FillRectangle(G, pBrush, 18,y , 18, 4)
- Gdip_DrawRectangle(G, pPen, 18,y , 18, 4)
- y+=8
- }
- Gdip_DeleteBrush(pPen)
- Gdip_DeleteBrush(pBrush)
- pPen := Gdip_CreatePen(0xff7e7e7e, 3)
- Gdip_DrawEllipse(G, pPen, 45,20 , 39, 39)
- Gdip_DeleteBrush(pPen)
- ; Treads
- pBrush := Gdip_BrushCreatesolid(0xffD8A700)
- Gdip_FillRectangle(G, pBrush, 0,0 , 100, 15)
- Gdip_FillRectangle(G, pBrush, 0,65 , 100, 15)
- Gdip_DeleteBrush(pBrush)
- pPen := Gdip_CreatePen(0xff000000, 2)
- Gdip_DrawRectangle(G, pPen, 1, 1, 100-2, 15)
- Gdip_DrawRectangle(G, pPen, 1, 65-1, 100-2, 15)
- Gdip_DeleteBrush(pPen)
- pPen := Gdip_CreatePen(0xff000000, 2)
- x:= 10
- Loop 8
- {
- Gdip_DrawRectangle(G, pPen, x, 1, 10, 15)
- Gdip_DrawRectangle(G, pPen, x, 65, 10, 15)
- x+=10
- }
- Gdip_DeleteBrush(pPen)
- pBrush := Gdip_BrushCreatesolid(0xffFFDB00)
- Gdip_FillRectangle(G, pBrush, 11,2 , 8, 13)
- Gdip_FillRectangle(G, pBrush, 11,65 , 8, 13)
- Gdip_DeleteBrush(pBrush)
- Gdip_SaveBitmapToFile(pBitmap, "BR.png")
- pbitmap2:=Gdip_RotateBitmap(pBitmap, 180, Dispose=1)
- Gdip_SaveBitmapToFile(pBitmap2, "BL.png")
- pbitmap2:=Gdip_RotateBitmap(pBitmap, 90, Dispose=1)
- Gdip_SaveBitmapToFile(pBitmap2, "BD.png")
- pbitmap2:=Gdip_RotateBitmap(pBitmap,270, Dispose=1)
- Gdip_SaveBitmapToFile(pBitmap2, "BU.png")
- pbitmap2:=Gdip_RotateBitmap(pBitmap, 45, Dispose=1)
- Gdip_SaveBitmapToFile(pBitmap2, "BDR.png")
- pbitmap2:=Gdip_RotateBitmap(pBitmap, 135, Dispose=1)
- Gdip_SaveBitmapToFile(pBitmap2, "BDL.png")
- pbitmap2:=Gdip_RotateBitmap(pBitmap, 315, Dispose=1)
- Gdip_SaveBitmapToFile(pBitmap2, "BUR.png")
- pbitmap2:=Gdip_RotateBitmap(pBitmap, 225, Dispose=1)
- Gdip_SaveBitmapToFile(pBitmap2, "BUL.png")
- Gdip_DisposeImage(pBitmap)
- pBitmap := Gdip_CreateBitmap(100, 42)
- G := Gdip_GraphicsFromImage(pBitmap)
- Gdip_SetSmoothingMode(G, 4)
- ;Cannon
- pBrush := Gdip_BrushCreateSolid(0xff7e7e7e)
- Gdip_FillRectangle(G, pBrush, 45,15 , 54, 10)
- Gdip_DeleteBrush(pBrush)
- pPen := Gdip_CreatePen(0xff000000, 3)
- Gdip_DrawRectangle(G, pPen, 45, 15, 54, 10)
- Gdip_DeleteBrush(pPen)
- pBrush := Gdip_BrushCreateSolid(0xff479B1B)
- Gdip_FillEllipse(G, pBrush, 1,1 , 40, 40)
- Gdip_DeleteBrush(pBrush)
- pPen := Gdip_CreatePen(0xff000000, 3)
- Gdip_DrawEllipse(G, pPen, 1,1 , 39, 39)
- Gdip_DeleteBrush(pPen)
- pBrush := Gdip_BrushCreateSolid(0xff479B1B)
- Gdip_FillRectangle(G, pBrush, 35 ,10 , 10, 20)
- Gdip_DeleteBrush(pBrush)
- pPen := Gdip_CreatePen(0xff000000, 2)
- Gdip_DrawRectangle(G, pPen, 35 ,10 , 10, 20)
- Gdip_DeleteBrush(pPen)
- Gdip_SaveBitmapToFile(pBitmap,"TR.png")
- pbitmap2:=Gdip_RotateBitmap(pBitmap, 180, Dispose=1)
- Gdip_SaveBitmapToFile(pBitmap2, "TL.png")
- pbitmap2:=Gdip_RotateBitmap(pBitmap, 90, Dispose=1)
- Gdip_SaveBitmapToFile(pBitmap2, "TD.png")
- pbitmap2:=Gdip_RotateBitmap(pBitmap,270, Dispose=1)
- Gdip_SaveBitmapToFile(pBitmap2, "TU.png")
- pbitmap2:=Gdip_RotateBitmap(pBitmap, 45, Dispose=1)
- Gdip_SaveBitmapToFile(pBitmap2, "TDR.png")
- pbitmap2:=Gdip_RotateBitmap(pBitmap, 135, Dispose=1)
- Gdip_SaveBitmapToFile(pBitmap2, "TDL.png")
- pbitmap2:=Gdip_RotateBitmap(pBitmap, 315, Dispose=1)
- Gdip_SaveBitmapToFile(pBitmap2, "TUR.png")
- pbitmap2:=Gdip_RotateBitmap(pBitmap, 225, Dispose=1)
- Gdip_SaveBitmapToFile(pBitmap2, "TUL.png")
- Gdip_DisposeImage(pBitmap)
- Gdip_DisposeImage(pBitmap2)
- pBitmap := Gdip_CreateBitmap(20, 10)
- G := Gdip_GraphicsFromImage(pBitmap)
- Gdip_SetSmoothingMode(G, 4) ; Shell
- pBrush := Gdip_BrushCreateSolid(0xff00ffff)
- Gdip_FillEllipse(G, pBrush, -20, 2, 40, 6)
- Gdip_DeleteBrush(pBrush)
- pPen := Gdip_CreatePen(0xff000000, 2)
- Gdip_DrawEllipse(G, ppen, -20, 2, 40, 6)
- Gdip_DeleteBrush(ppen)
- Gdip_SaveBitmapToFile(pBitmap, "SR.png")
- pbitmap2:=Gdip_RotateBitmap(pBitmap, 180, Dispose=1)
- Gdip_SaveBitmapToFile(pBitmap2, "SL.png")
- pbitmap2:=Gdip_RotateBitmap(pBitmap, 90, Dispose=1)
- Gdip_SaveBitmapToFile(pBitmap2, "SD.png")
- pbitmap2:=Gdip_RotateBitmap(pBitmap,270, Dispose=1)
- Gdip_SaveBitmapToFile(pBitmap2, "SU.png")
- pbitmap2:=Gdip_RotateBitmap(pBitmap, 45, Dispose=1)
- Gdip_SaveBitmapToFile(pBitmap2, "SDR.png")
- pbitmap2:=Gdip_RotateBitmap(pBitmap, 135, Dispose=1)
- Gdip_SaveBitmapToFile(pBitmap2, "SDL.png")
- pbitmap2:=Gdip_RotateBitmap(pBitmap, 315, Dispose=1)
- Gdip_SaveBitmapToFile(pBitmap2, "SUR.png")
- pbitmap2:=Gdip_RotateBitmap(pBitmap, 225, Dispose=1)
- Gdip_SaveBitmapToFile(pBitmap2, "SUL.png")
- Gdip_DisposeImage(pBitmap)
- Gdip_DisposeImage(pBitmap2)
- Gdip_DeleteGraphics(G)
- Gdip_Shutdown(pToken)
- Gdip_RotateBitmap(pBitmap, Angle, Dispose=1) {
- Gdip_GetImageDimensions(pBitmap, Width, Height)
- Gdip_GetRotatedDimensions(Width, Height, Angle, RWidth, RHeight)
- Gdip_GetRotatedTranslation(Width, Height, Angle, xTranslation, yTranslation)
- pBitmap2 := Gdip_CreateBitmap(RWidth, RHeight)
- G2 := Gdip_GraphicsFromImage(pBitmap2), Gdip_SetSmoothingMode(G2, 4), Gdip_SetInterpolationMode(G2, 7)
- Gdip_TranslateWorldTransform(G2, xTranslation, yTranslation)
- Gdip_RotateWorldTransform(G2, Angle)
- Gdip_DrawImage(G2, pBitmap, 0, 0, Width, Height)
- Gdip_ResetWorldTransform(G2)
- Gdip_DeleteGraphics(G2)
- if Dispose
- Gdip_DisposeImage(pBitmap)
- return pBitmap2
- }
- ; Main Game
- ;#############################################################################################
- ;#############################################################################################
- ;#############################################################################################
- ;#############################################################################################
- ;#############################################################################################
- CoordMode,Mouse,window
- global New_Body_Direction := 2
- global Old_Body_Direction := 2
- global New_Turret_Direction := 1
- global Old_Turret_Direction := 1
- global Body_Type1 := "BUR.png"
- global Body_Type2 := "BR.png"
- global Body_Type3 := "BDR.png"
- global Body_Type4 := "BD.png"
- global Body_Type5 := "BDL.png"
- global Body_Type6 := "BL.png"
- global Body_Type7 := "BUL.png"
- global Body_Type8 := "BU.png"
- global Turret_Type1 := "TR.png"
- global Turret_Type2 := "TL.png"
- global Turret_Type3 := "TU.png"
- global Turret_Type4 := "TD.png"
- global Turret_Type5 := "TUR.png"
- global Turret_Type6 := "TUL.png"
- global Turret_Type7 := "TDL.png"
- global Turret_Type8 := "TDR.png"
- Body_X := 200
- Body_Y := 200
- Turret_W1 := 100 ;TR
- Turret_H1 := 42
- Turret_W2 := 101 ;TL
- Turret_H2 := 43
- Turret_W3 := 43 ;TU
- Turret_H3 := 101
- Turret_W4 := 43 ;TD
- Turret_H4 := 101
- Turret_W5 := 101 ;TUR
- Turret_H5 := 101
- Turret_W6 := 101 ;TUL
- Turret_H6 := 101
- Turret_W7 := 101 ;TDL
- Turret_H7 := 101
- Turret_W8 := 101 ;TDR
- Turret_H8 := 101
- BW1 := 128 ;BUR
- BH1 := 128
- BW2 := 100 ;BR
- BH2 := 80
- BW3 := 128 ;BDR
- BH3 := 128
- BW4 := 81 ;BD
- BH4 := 101
- BW5 := 128 ;BDL
- BH5 := 128
- BW6 := 101 ;BL
- BH6 := 81
- BW7 := 128 ;BUL
- BH7 := 128
- BW8 := 81 ;BU
- BH8 := 101
- Get_Turret_Loctaion()
- Gui, 1:+AlwaysOnTop
- Gui, 1:Color,0x373300
- Gui, 2:+AlwaysOnTop +Owner1 -Caption
- Gui, 2:Color,0x373300
- Gui, 3:+AlwaysOnTop +Owner1 -Caption
- Gui, 3:Color,0x373300
- Gui, 2:Add, Picture, x200 y200 w100 h80 vTank_Body,%Body_Type2%
- Gui, 3:Add, Picture, x245 y219 w100 h42 vTurret,%Turret_Type1%
- ;Gui, 3:Add, Picture,x350 y235 ,SU.png
- Gui,1:Show, w1300 h700,GDip Tank Game
- WinGetPos,x,y,,,GDip Tank Game
- x2:= x+3,y2:= y+25
- Gui,2:Show,x%x2% y%y2% w1300 h700
- Gui,3:Show,x%x2% y%y2% w1300 h700
- Gui,2:+LAstFound
- WinSet,TransColor,0x373300
- Gui,3:+LAstFound
- WinSet,TransColor,0x373300
- SetTimer, Move_Player,10
- return
- GuiClose:
- ExitApp
- Move_Player:
- Up_Arrow := GetKeyState("Up")
- Down_Arrow := GetKeyState("Down")
- Left_Arrow := GetKeyState("Left")
- Right_Arrow := GetKeyState("Right")
- Space_Bar := GetKeyState("Space")
- WW := GetKeyState("W")
- SS := GetKeyState("S")
- AA := GetKeyState("A")
- DD := GetKeyState("D")
- if(WW==True&&DD==True)
- {
- New_Body_Direction := 1
- if(New_Body_Direction!=Old_Body_Direction)
- {
- Old_Body_Direction := New_Body_Direction
- Get_Turret_Loctaion()
- BODY_W := BW%New_Body_Direction%
- BODY_H := BH%New_Body_Direction%
- GuiControl,2:Move,Tank_Body,w%BODY_W% h%BODY_H%
- GuiControl,2:,Tank_Body,% Body_Type%New_Body_Direction%
- GuiControl,3:Move,Turret,x%Turret_X% y%Turret_Y%
- ;msgbox,% Turret_X "`n" Turret_Y
- }
- Body_X++
- Body_Y--
- Turret_X ++
- Turret_Y --
- GuiControl,2:Move,Tank_Body,x%Body_X% y%Body_Y%
- GuiControl,3:Move,Turret,x%Turret_X% y%Turret_Y%
- }
- else if(SS==True&&DD==True)
- {
- New_Body_Direction := 3
- if(New_Body_Direction!=Old_Body_Direction)
- {
- Old_Body_Direction := New_Body_Direction
- Get_Turret_Loctaion()
- BODY_W := BW%New_Body_Direction%
- BODY_H := BH%New_Body_Direction%
- GuiControl,2:Move,Tank_Body,w%BODY_W% h%BODY_H%
- GuiControl,2:,Tank_Body,% Body_Type%New_Body_Direction%
- GuiControl,3:Move,Turret,x%Turret_X% y%Turret_Y%
- ;msgbox,% Turret_X "`n" Turret_Y
- }
- Body_X++
- Body_Y++
- Turret_X ++
- Turret_Y ++
- GuiControl,2:Move,Tank_Body,x%Body_X% y%Body_Y%
- GuiControl,3:Move,Turret,x%Turret_X% y%Turret_Y%
- }
- else if(AA==True&&SS==True)
- {
- New_Body_Direction := 5
- if(New_Body_Direction!=Old_Body_Direction)
- {
- Old_Body_Direction := New_Body_Direction
- Get_Turret_Loctaion()
- BODY_W := BW%New_Body_Direction%
- BODY_H := BH%New_Body_Direction%
- GuiControl,2:Move,Tank_Body,w%BODY_W% h%BODY_H%
- GuiControl,2:,Tank_Body,% Body_Type%New_Body_Direction%
- GuiControl,3:Move,Turret,x%Turret_X% y%Turret_Y%
- ;msgbox,% Turret_X "`n" Turret_Y
- }
- Body_X--
- Body_Y++
- Turret_X --
- Turret_Y ++
- GuiControl,2:Move,Tank_Body,x%Body_X% y%Body_Y%
- GuiControl,3:Move,Turret,x%Turret_X% y%Turret_Y%
- }
- else if(WW==True&&AA==True)
- {
- New_Body_Direction := 7
- if(New_Body_Direction!=Old_Body_Direction)
- {
- Old_Body_Direction := New_Body_Direction
- Get_Turret_Loctaion()
- BODY_W := BW%New_Body_Direction%
- BODY_H := BH%New_Body_Direction%
- GuiControl,2:Move,Tank_Body,w%BODY_W% h%BODY_H%
- GuiControl,2:,Tank_Body,% Body_Type%New_Body_Direction%
- GuiControl,3:Move,Turret,x%Turret_X% y%Turret_Y%
- ;msgbox,% Turret_X "`n" Turret_Y
- }
- Body_X--
- Body_Y--
- Turret_X --
- Turret_Y --
- GuiControl,2:Move,Tank_Body,x%Body_X% y%Body_Y%
- GuiControl,3:Move,Turret,x%Turret_X% y%Turret_Y%
- }
- else if(WW==True)
- {
- New_Body_Direction := 8
- if(New_Body_Direction!=Old_Body_Direction)
- {
- Old_Body_Direction := New_Body_Direction
- Get_Turret_Loctaion()
- BODY_W := BW%New_Body_Direction%
- BODY_H := BH%New_Body_Direction%
- GuiControl,2:Move,Tank_Body,w%BODY_W% h%BODY_H%
- GuiControl,2:,Tank_Body,% Body_Type%New_Body_Direction%
- GuiControl,3:Move,Turret,x%Turret_X% y%Turret_Y%
- ;msgbox,% Turret_X "`n" Turret_Y
- }
- ;Body_X--
- Body_Y--
- ;Turret_X --
- Turret_Y --
- GuiControl,2:Move,Tank_Body,x%Body_X% y%Body_Y%
- GuiControl,3:Move,Turret,x%Turret_X% y%Turret_Y%
- }
- else if(DD==True)
- {
- New_Body_Direction := 2
- if(New_Body_Direction!=Old_Body_Direction)
- {
- Old_Body_Direction := New_Body_Direction
- Get_Turret_Loctaion()
- BODY_W := BW%New_Body_Direction%
- BODY_H := BH%New_Body_Direction%
- GuiControl,2:Move,Tank_Body,w%BODY_W% h%BODY_H%
- GuiControl,2:,Tank_Body,% Body_Type%New_Body_Direction%
- GuiControl,3:Move,Turret,x%Turret_X% y%Turret_Y%
- ;msgbox,% Turret_X "`n" Turret_Y
- }
- Body_X++
- ;Body_Y--
- Turret_X ++
- ;Turret_Y --
- GuiControl,2:Move,Tank_Body,x%Body_X% y%Body_Y%
- GuiControl,3:Move,Turret,x%Turret_X% y%Turret_Y%
- }
- else if(SS==True)
- {
- New_Body_Direction := 4
- if(New_Body_Direction!=Old_Body_Direction)
- {
- Old_Body_Direction := New_Body_Direction
- Get_Turret_Loctaion()
- BODY_W := BW%New_Body_Direction%
- BODY_H := BH%New_Body_Direction%
- GuiControl,2:Move,Tank_Body,w%BODY_W% h%BODY_H%
- GuiControl,2:,Tank_Body,% Body_Type%New_Body_Direction%
- GuiControl,3:Move,Turret,x%Turret_X% y%Turret_Y%
- ;msgbox,% Turret_X "`n" Turret_Y
- }
- ;Body_X++
- Body_Y++
- ;Turret_X ++
- Turret_Y ++
- GuiControl,2:Move,Tank_Body,x%Body_X% y%Body_Y%
- GuiControl,3:Move,Turret,x%Turret_X% y%Turret_Y%
- }
- else if(AA==True)
- {
- New_Body_Direction := 6
- if(New_Body_Direction!=Old_Body_Direction)
- {
- Old_Body_Direction := New_Body_Direction
- Get_Turret_Loctaion()
- BODY_W := BW%New_Body_Direction%
- BODY_H := BH%New_Body_Direction%
- GuiControl,2:Move,Tank_Body,w%BODY_W% h%BODY_H%
- GuiControl,2:,Tank_Body,% Body_Type%New_Body_Direction%
- GuiControl,3:Move,Turret,x%Turret_X% y%Turret_Y%
- ;msgbox,% Turret_X "`n" Turret_Y
- }
- Body_X--
- ;Body_Y++
- Turret_X --
- ;Turret_Y ++
- GuiControl,2:Move,Tank_Body,x%Body_X% y%Body_Y%
- GuiControl,3:Move,Turret,x%Turret_X% y%Turret_Y%
- }
- MouseGetPos,x,y
- if(Up_Arrow==True&&Left_Arrow==True)
- {
- New_Turret_Direction := 6
- }
- else if(Up_Arrow==True&&Right_Arrow==True)
- {
- New_Turret_Direction := 5
- }
- else if(Down_Arrow==True&&Right_Arrow==True)
- {
- New_Turret_Direction := 8
- }
- else if(Down_Arrow==True&&Left_Arrow==True)
- {
- New_Turret_Direction := 7
- }
- else if(Left_Arrow==True)
- {
- New_Turret_Direction := 2
- }
- else if(Up_Arrow==True)
- {
- New_Turret_Direction := 3
- }
- else if(Right_Arrow==True)
- {
- New_Turret_Direction := 1
- }
- else if(Down_Arrow==True)
- {
- New_Turret_Direction := 4
- }
- if(New_Turret_Direction!=Old_Turret_Direction)
- {
- Old_Turret_Direction := New_Turret_Direction
- Get_Turret_Loctaion()
- TW := Turret_W%New_Turret_Direction%
- TH := Turret_H%New_Turret_Direction%
- GuiControl,3:Move,Turret,x%Turret_X% y%Turret_Y% w%TW% h%TH%
- GuiControl,3:,Turret,% Turret_Type%New_Turret_Direction%
- }
- return
- Get_Turret_Loctaion()
- {
- Global
- if(New_Body_Direction>1)
- Comp_POS := ((New_Body_Direction-1) * 8) + New_Turret_Direction
- else
- Comp_POS := New_Body_Direction * New_Turret_Direction
- COMP_X := []
- COMP_Y := []
- COMP_X := [53,-5,53,53,45,3,3,45,45,-14,45,44,34,-7,-7,34,53,-5,53,53,45,3,3,45,20,-39,20,19,11,-31,-31,11,33,-26,33,32,24,-18,-18,24,14,-44,15,15,5,-36,-36,5,33,-26,33,32,23,-18,-18,23,19,-39,19,19,10,-31,-31,10]
- COMP_Y := [32,32,-26,32,-18,-18,23,23,19,19,-39,19,-30,-30,10,10,53,53,-5,53,3,3,43,44,44,44,-15,44,-6,-6,34,35,54,54,-5,54,3,3,44,44,19,19,-39,19,-30,-30,10,10,33,33,-26,33,-18,-18,23,24,15,15,-43,15,-35,-35,7,7]
- Turret_X := Body_X + COMP_X[Comp_POS]
- Turret_Y := Body_Y + COMP_Y[Comp_POS]
- /*
- x & y compensation for tank body and turret
- Body Turret X/Y +/- ; difference is added or subtracted from turret
- ;------------ ------------- --------------------
- 1. BUR TR X + 53 / Y + 32
- 2. BUR TL X - 5 / Y + 32
- 3. BUR TU X + 53 / Y - 26
- 4. BUR TD X + 53 / Y + 32
- 5. BUR TUR X + 45 / Y - 18
- 6. BUR TUL X + 3 / Y - 18
- 7. BUR TDL X + 3 / Y + 23
- 8. BUR TDR X + 45 / Y + 23
- ;#############################################################
- 1. BR TR X + 45 / Y + 19
- 2. BR TL X - 14 / Y + 19
- 3. BR TU X + 45 / Y - 39
- 4. BR TD X + 44 / Y + 19
- 5. BR TUR X + 34 / Y - 30
- 6. BR TUL X - 7 / Y - 30
- 7. BR TDL X - 7 / Y + 10
- 8. BR TDR X + 34 / Y + 10
- ;#############################################################
- 1. BDR TR X + 53 / Y + 53
- 2. BDR TL X - 5 / Y + 53
- 3. BDR TU X + 53 / Y - 5
- 4. BDR TD X + 53 / Y + 53
- 5. BDR TUR X + 45 / Y + 3
- 6. BDR TUL X + 3 / Y + 3
- 7. BDR TDL X + 3 / Y + 43
- 8. BDR TDR X + 45 / Y + 44
- ;#############################################################
- 1. BD TR X + 20 / Y + 44
- 2. BD TL X - 39 / Y + 44
- 3. BD TU X + 20 / Y - 15
- 4. BD TD X + 19 / Y + 44
- 5. BD TUR X + 11 / Y -6
- 6. BD TUL X - 31 / Y - 6
- 7. BD TDL X - 31 / Y + 34
- 8. BD TDR X + 11 / Y + 35
- ;#############################################################
- 1. BDL TR X + 33 / Y + 54
- 2. BDL TL X - 26 / Y + 54
- 3. BDL TU X + 33 / Y - 5
- 4. BDL TD X + 32 / Y + 54
- 5. BDL TUR X + 24 / Y + 3
- 6. BDL TUL X - 18 / Y + 3
- 7. BDL TDL X - 18 / Y + 44
- 8. BDL TDR X + 24 / Y + 44
- ;#############################################################
- 1. BL TR X + 14 / Y + 19
- 2. BL TL X - 44 / Y + 19
- 3. BL TU X + 15 / Y - 39
- 4. BL TD X + 15 / Y + 19
- 5. BL TUR X + 5 / Y - 30
- 6. BL TUL X - 36 / Y - 30
- 7. BL TDL X - 36 / Y + 10
- 8. BL TDR X + 5 / Y + 10
- ;#############################################################
- 1. BUL TR X + 33 / Y + 33
- 2. BUL TL X - 26 / Y + 33
- 3. BUL TU X + 33 / Y - 26
- 4. BUL TD X + 32 / Y + 33
- 5. BUL TUR X + 23 / Y - 18
- 6. BUL TUL X - 18 / Y - 18
- 7. BUL TDL X - 18 / Y + 23
- 8. BUL TDR X + 23 / Y + 24
- ;#############################################################
- 1. BU TR X + 19 / Y + 15
- 2. BU TL X - 39 / Y + 15
- 3. BU TU X + 19 / Y - 43
- 4. BU TD X + 19 / Y + 15
- 5. BU TUR X + 10 / Y -35
- 6. BU TUL X - 31 / Y - 35
- 7. BU TDL X - 31 / Y + 7
- 8. BU TDR X + 10 / Y + 7
- ;#############################################################
- */
- }
- ; Gdip.ahk Lib
- ;#############################################################################################
- ;#############################################################################################
- ;#############################################################################################
- ;#############################################################################################
- ;#############################################################################################
- UpdateLayeredWindow(hwnd, hdc, x="", y="", w="", h="", Alpha=255)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- if ((x != "") && (y != ""))
- VarSetCapacity(pt, 8), NumPut(x, pt, 0, "UInt"), NumPut(y, pt, 4, "UInt")
- if (w = "") ||(h = "")
- WinGetPos,,, w, h, ahk_id %hwnd%
- return DllCall("UpdateLayeredWindow"
- , Ptr, hwnd
- , Ptr, 0
- , Ptr, ((x = "") && (y = "")) ? 0 : &pt
- , "int64*", w|h<<32
- , Ptr, hdc
- , "int64*", 0
- , "uint", 0
- , "UInt*", Alpha<<16|1<<24
- , "uint", 2)
- }
- BitBlt(ddc, dx, dy, dw, dh, sdc, sx, sy, Raster="")
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- return DllCall("gdi32\BitBlt"
- , Ptr, dDC
- , "int", dx
- , "int", dy
- , "int", dw
- , "int", dh
- , Ptr, sDC
- , "int", sx
- , "int", sy
- , "uint", Raster ? Raster : 0x00CC0020)
- }
- StretchBlt(ddc, dx, dy, dw, dh, sdc, sx, sy, sw, sh, Raster="")
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- return DllCall("gdi32\StretchBlt"
- , Ptr, ddc
- , "int", dx
- , "int", dy
- , "int", dw
- , "int", dh
- , Ptr, sdc
- , "int", sx
- , "int", sy
- , "int", sw
- , "int", sh
- , "uint", Raster ? Raster : 0x00CC0020)
- }
- SetStretchBltMode(hdc, iStretchMode=4)
- {
- return DllCall("gdi32\SetStretchBltMode"
- , A_PtrSize ? "UPtr" : "UInt", hdc
- , "int", iStretchMode)
- }
- SetImage(hwnd, hBitmap)
- {
- SendMessage, 0x172, 0x0, hBitmap,, ahk_id %hwnd%
- E := ErrorLevel
- DeleteObject(E)
- return E
- }
- SetSysColorToControl(hwnd, SysColor=15)
- {
- WinGetPos,,, w, h, ahk_id %hwnd%
- bc := DllCall("GetSysColor", "Int", SysColor, "UInt")
- pBrushClear := Gdip_BrushCreateSolid(0xff000000 | (bc >> 16 | bc & 0xff00 | (bc & 0xff) << 16))
- pBitmap := Gdip_CreateBitmap(w, h), G := Gdip_GraphicsFromImage(pBitmap)
- Gdip_FillRectangle(G, pBrushClear, 0, 0, w, h)
- hBitmap := Gdip_CreateHBITMAPFromBitmap(pBitmap)
- SetImage(hwnd, hBitmap)
- Gdip_DeleteBrush(pBrushClear)
- Gdip_DeleteGraphics(G), Gdip_DisposeImage(pBitmap), DeleteObject(hBitmap)
- return 0
- }
- Gdip_BitmapFromScreen(Screen=0, Raster="")
- {
- if (Screen = 0)
- {
- Sysget, x, 76
- Sysget, y, 77
- Sysget, w, 78
- Sysget, h, 79
- }
- else if (SubStr(Screen, 1, 5) = "hwnd:")
- {
- Screen := SubStr(Screen, 6)
- if !WinExist( "ahk_id " Screen)
- return -2
- WinGetPos,,, w, h, ahk_id %Screen%
- x := y := 0
- hhdc := GetDCEx(Screen, 3)
- }
- else if (Screen&1 != "")
- {
- Sysget, M, Monitor, %Screen%
- x := MLeft, y := MTop, w := MRight-MLeft, h := MBottom-MTop
- }
- else
- {
- StringSplit, S, Screen, |
- x := S1, y := S2, w := S3, h := S4
- }
- if (x = "") || (y = "") || (w = "") || (h = "")
- return -1
- chdc := CreateCompatibleDC(), hbm := CreateDIBSection(w, h, chdc), obm := SelectObject(chdc, hbm), hhdc := hhdc ? hhdc : GetDC()
- BitBlt(chdc, 0, 0, w, h, hhdc, x, y, Raster)
- ReleaseDC(hhdc)
- pBitmap := Gdip_CreateBitmapFromHBITMAP(hbm)
- SelectObject(chdc, obm), DeleteObject(hbm), DeleteDC(hhdc), DeleteDC(chdc)
- return pBitmap
- }
- Gdip_BitmapFromHWND(hwnd)
- {
- WinGetPos,,, Width, Height, ahk_id %hwnd%
- hbm := CreateDIBSection(Width, Height), hdc := CreateCompatibleDC(), obm := SelectObject(hdc, hbm)
- PrintWindow(hwnd, hdc)
- pBitmap := Gdip_CreateBitmapFromHBITMAP(hbm)
- SelectObject(hdc, obm), DeleteObject(hbm), DeleteDC(hdc)
- return pBitmap
- }
- CreateRectF(ByRef RectF, x, y, w, h)
- {
- VarSetCapacity(RectF, 16)
- NumPut(x, RectF, 0, "float"), NumPut(y, RectF, 4, "float"), NumPut(w, RectF, 8, "float"), NumPut(h, RectF, 12, "float")
- }
- CreateRect(ByRef Rect, x, y, w, h)
- {
- VarSetCapacity(Rect, 16)
- NumPut(x, Rect, 0, "uint"), NumPut(y, Rect, 4, "uint"), NumPut(w, Rect, 8, "uint"), NumPut(h, Rect, 12, "uint")
- }
- CreateSizeF(ByRef SizeF, w, h)
- {
- VarSetCapacity(SizeF, 8)
- NumPut(w, SizeF, 0, "float"), NumPut(h, SizeF, 4, "float")
- }
- CreatePointF(ByRef PointF, x, y)
- {
- VarSetCapacity(PointF, 8)
- NumPut(x, PointF, 0, "float"), NumPut(y, PointF, 4, "float")
- }
- CreateDIBSection(w, h, hdc="", bpp=32, ByRef ppvBits=0)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- hdc2 := hdc ? hdc : GetDC()
- VarSetCapacity(bi, 40, 0)
- NumPut(w, bi, 4, "uint")
- , NumPut(h, bi, 8, "uint")
- , NumPut(40, bi, 0, "uint")
- , NumPut(1, bi, 12, "ushort")
- , NumPut(0, bi, 16, "uInt")
- , NumPut(bpp, bi, 14, "ushort")
- hbm := DllCall("CreateDIBSection"
- , Ptr, hdc2
- , Ptr, &bi
- , "uint", 0
- , A_PtrSize ? "UPtr*" : "uint*", ppvBits
- , Ptr, 0
- , "uint", 0, Ptr)
- if !hdc
- ReleaseDC(hdc2)
- return hbm
- }
- PrintWindow(hwnd, hdc, Flags=0)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- return DllCall("PrintWindow", Ptr, hwnd, Ptr, hdc, "uint", Flags)
- }
- DestroyIcon(hIcon)
- {
- return DllCall("DestroyIcon", A_PtrSize ? "UPtr" : "UInt", hIcon)
- }
- PaintDesktop(hdc)
- {
- return DllCall("PaintDesktop", A_PtrSize ? "UPtr" : "UInt", hdc)
- }
- CreateCompatibleBitmap(hdc, w, h)
- {
- return DllCall("gdi32\CreateCompatibleBitmap", A_PtrSize ? "UPtr" : "UInt", hdc, "int", w, "int", h)
- }
- CreateCompatibleDC(hdc=0)
- {
- return DllCall("CreateCompatibleDC", A_PtrSize ? "UPtr" : "UInt", hdc)
- }
- SelectObject(hdc, hgdiobj)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- return DllCall("SelectObject", Ptr, hdc, Ptr, hgdiobj)
- }
- DeleteObject(hObject)
- {
- return DllCall("DeleteObject", A_PtrSize ? "UPtr" : "UInt", hObject)
- }
- GetDC(hwnd=0)
- {
- return DllCall("GetDC", A_PtrSize ? "UPtr" : "UInt", hwnd)
- }
- GetDCEx(hwnd, flags=0, hrgnClip=0)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- return DllCall("GetDCEx", Ptr, hwnd, Ptr, hrgnClip, "int", flags)
- }
- ReleaseDC(hdc, hwnd=0)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- return DllCall("ReleaseDC", Ptr, hwnd, Ptr, hdc)
- }
- DeleteDC(hdc)
- {
- return DllCall("DeleteDC", A_PtrSize ? "UPtr" : "UInt", hdc)
- }
- Gdip_LibraryVersion()
- {
- return 1.45
- }
- Gdip_LibrarySubVersion()
- {
- return 1.47
- }
- Gdip_BitmapFromBRA(ByRef BRAFromMemIn, File, Alternate=0)
- {
- Static FName = "ObjRelease"
- if !BRAFromMemIn
- return -1
- Loop, Parse, BRAFromMemIn, `n
- {
- if (A_Index = 1)
- {
- StringSplit, Header, A_LoopField, |
- if (Header0 != 4 || Header2 != "BRA!")
- return -2
- }
- else if (A_Index = 2)
- {
- StringSplit, Info, A_LoopField, |
- if (Info0 != 3)
- return -3
- }
- else
- break
- }
- if !Alternate
- StringReplace, File, File, \, \\, All
- RegExMatch(BRAFromMemIn, "mi`n)^" (Alternate ? File "\|.+?\|(\d+)\|(\d+)" : "\d+\|" File "\|(\d+)\|(\d+)") "$", FileInfo)
- if !FileInfo
- return -4
- hData := DllCall("GlobalAlloc", "uint", 2, Ptr, FileInfo2, Ptr)
- pData := DllCall("GlobalLock", Ptr, hData, Ptr)
- DllCall("RtlMoveMemory", Ptr, pData, Ptr, &BRAFromMemIn+Info2+FileInfo1, Ptr, FileInfo2)
- DllCall("GlobalUnlock", Ptr, hData)
- DllCall("ole32\CreateStreamOnHGlobal", Ptr, hData, "int", 1, A_PtrSize ? "UPtr*" : "UInt*", pStream)
- DllCall("gdiplus\GdipCreateBitmapFromStream", Ptr, pStream, A_PtrSize ? "UPtr*" : "UInt*", pBitmap)
- If (A_PtrSize)
- %FName%(pStream)
- Else
- DllCall(NumGet(NumGet(1*pStream)+8), "uint", pStream)
- return pBitmap
- }
- Gdip_DrawRectangle(pGraphics, pPen, x, y, w, h)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- return DllCall("gdiplus\GdipDrawRectangle", Ptr, pGraphics, Ptr, pPen, "float", x, "float", y, "float", w, "float", h)
- }
- Gdip_DrawRoundedRectangle(pGraphics, pPen, x, y, w, h, r)
- {
- Gdip_SetClipRect(pGraphics, x-r, y-r, 2*r, 2*r, 4)
- Gdip_SetClipRect(pGraphics, x+w-r, y-r, 2*r, 2*r, 4)
- Gdip_SetClipRect(pGraphics, x-r, y+h-r, 2*r, 2*r, 4)
- Gdip_SetClipRect(pGraphics, x+w-r, y+h-r, 2*r, 2*r, 4)
- E := Gdip_DrawRectangle(pGraphics, pPen, x, y, w, h)
- Gdip_ResetClip(pGraphics)
- Gdip_SetClipRect(pGraphics, x-(2*r), y+r, w+(4*r), h-(2*r), 4)
- Gdip_SetClipRect(pGraphics, x+r, y-(2*r), w-(2*r), h+(4*r), 4)
- Gdip_DrawEllipse(pGraphics, pPen, x, y, 2*r, 2*r)
- Gdip_DrawEllipse(pGraphics, pPen, x+w-(2*r), y, 2*r, 2*r)
- Gdip_DrawEllipse(pGraphics, pPen, x, y+h-(2*r), 2*r, 2*r)
- Gdip_DrawEllipse(pGraphics, pPen, x+w-(2*r), y+h-(2*r), 2*r, 2*r)
- Gdip_ResetClip(pGraphics)
- return E
- }
- Gdip_DrawEllipse(pGraphics, pPen, x, y, w, h)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- return DllCall("gdiplus\GdipDrawEllipse", Ptr, pGraphics, Ptr, pPen, "float", x, "float", y, "float", w, "float", h)
- }
- Gdip_DrawBezier(pGraphics, pPen, x1, y1, x2, y2, x3, y3, x4, y4)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- return DllCall("gdiplus\GdipDrawBezier"
- , Ptr, pgraphics
- , Ptr, pPen
- , "float", x1
- , "float", y1
- , "float", x2
- , "float", y2
- , "float", x3
- , "float", y3
- , "float", x4
- , "float", y4)
- }
- Gdip_DrawArc(pGraphics, pPen, x, y, w, h, StartAngle, SweepAngle)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- return DllCall("gdiplus\GdipDrawArc"
- , Ptr, pGraphics
- , Ptr, pPen
- , "float", x
- , "float", y
- , "float", w
- , "float", h
- , "float", StartAngle
- , "float", SweepAngle)
- }
- Gdip_DrawPie(pGraphics, pPen, x, y, w, h, StartAngle, SweepAngle)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- return DllCall("gdiplus\GdipDrawPie", Ptr, pGraphics, Ptr, pPen, "float", x, "float", y, "float", w, "float", h, "float", StartAngle, "float", SweepAngle)
- }
- Gdip_DrawLine(pGraphics, pPen, x1, y1, x2, y2)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- return DllCall("gdiplus\GdipDrawLine"
- , Ptr, pGraphics
- , Ptr, pPen
- , "float", x1
- , "float", y1
- , "float", x2
- , "float", y2)
- }
- Gdip_DrawLines(pGraphics, pPen, Points)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- StringSplit, Points, Points, |
- VarSetCapacity(PointF, 8*Points0)
- Loop, %Points0%
- {
- StringSplit, Coord, Points%A_Index%, `,
- NumPut(Coord1, PointF, 8*(A_Index-1), "float"), NumPut(Coord2, PointF, (8*(A_Index-1))+4, "float")
- }
- return DllCall("gdiplus\GdipDrawLines", Ptr, pGraphics, Ptr, pPen, Ptr, &PointF, "int", Points0)
- }
- Gdip_FillRectangle(pGraphics, pBrush, x, y, w, h)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- return DllCall("gdiplus\GdipFillRectangle"
- , Ptr, pGraphics
- , Ptr, pBrush
- , "float", x
- , "float", y
- , "float", w
- , "float", h)
- }
- Gdip_FillRoundedRectangle(pGraphics, pBrush, x, y, w, h, r)
- {
- Region := Gdip_GetClipRegion(pGraphics)
- Gdip_SetClipRect(pGraphics, x-r, y-r, 2*r, 2*r, 4)
- Gdip_SetClipRect(pGraphics, x+w-r, y-r, 2*r, 2*r, 4)
- Gdip_SetClipRect(pGraphics, x-r, y+h-r, 2*r, 2*r, 4)
- Gdip_SetClipRect(pGraphics, x+w-r, y+h-r, 2*r, 2*r, 4)
- E := Gdip_FillRectangle(pGraphics, pBrush, x, y, w, h)
- Gdip_SetClipRegion(pGraphics, Region, 0)
- Gdip_SetClipRect(pGraphics, x-(2*r), y+r, w+(4*r), h-(2*r), 4)
- Gdip_SetClipRect(pGraphics, x+r, y-(2*r), w-(2*r), h+(4*r), 4)
- Gdip_FillEllipse(pGraphics, pBrush, x, y, 2*r, 2*r)
- Gdip_FillEllipse(pGraphics, pBrush, x+w-(2*r), y, 2*r, 2*r)
- Gdip_FillEllipse(pGraphics, pBrush, x, y+h-(2*r), 2*r, 2*r)
- Gdip_FillEllipse(pGraphics, pBrush, x+w-(2*r), y+h-(2*r), 2*r, 2*r)
- Gdip_SetClipRegion(pGraphics, Region, 0)
- Gdip_DeleteRegion(Region)
- return E
- }
- Gdip_FillPolygon(pGraphics, pBrush, Points, FillMode=0)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- StringSplit, Points, Points, |
- VarSetCapacity(PointF, 8*Points0)
- Loop, %Points0%
- {
- StringSplit, Coord, Points%A_Index%, `,
- NumPut(Coord1, PointF, 8*(A_Index-1), "float"), NumPut(Coord2, PointF, (8*(A_Index-1))+4, "float")
- }
- return DllCall("gdiplus\GdipFillPolygon", Ptr, pGraphics, Ptr, pBrush, Ptr, &PointF, "int", Points0, "int", FillMode)
- }
- Gdip_FillPie(pGraphics, pBrush, x, y, w, h, StartAngle, SweepAngle)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- return DllCall("gdiplus\GdipFillPie"
- , Ptr, pGraphics
- , Ptr, pBrush
- , "float", x
- , "float", y
- , "float", w
- , "float", h
- , "float", StartAngle
- , "float", SweepAngle)
- }
- Gdip_FillEllipse(pGraphics, pBrush, x, y, w, h)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- return DllCall("gdiplus\GdipFillEllipse", Ptr, pGraphics, Ptr, pBrush, "float", x, "float", y, "float", w, "float", h)
- }
- Gdip_FillRegion(pGraphics, pBrush, Region)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- return DllCall("gdiplus\GdipFillRegion", Ptr, pGraphics, Ptr, pBrush, Ptr, Region)
- }
- Gdip_FillPath(pGraphics, pBrush, Path)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- return DllCall("gdiplus\GdipFillPath", Ptr, pGraphics, Ptr, pBrush, Ptr, Path)
- }
- Gdip_DrawImagePointsRect(pGraphics, pBitmap, Points, sx="", sy="", sw="", sh="", Matrix=1)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- StringSplit, Points, Points, |
- VarSetCapacity(PointF, 8*Points0)
- Loop, %Points0%
- {
- StringSplit, Coord, Points%A_Index%, `,
- NumPut(Coord1, PointF, 8*(A_Index-1), "float"), NumPut(Coord2, PointF, (8*(A_Index-1))+4, "float")
- }
- if (Matrix&1 = "")
- ImageAttr := Gdip_SetImageAttributesColorMatrix(Matrix)
- else if (Matrix != 1)
- ImageAttr := Gdip_SetImageAttributesColorMatrix("1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|" Matrix "|0|0|0|0|0|1")
- if (sx = "" && sy = "" && sw = "" && sh = "")
- {
- sx := 0, sy := 0
- sw := Gdip_GetImageWidth(pBitmap)
- sh := Gdip_GetImageHeight(pBitmap)
- }
- E := DllCall("gdiplus\GdipDrawImagePointsRect"
- , Ptr, pGraphics
- , Ptr, pBitmap
- , Ptr, &PointF
- , "int", Points0
- , "float", sx
- , "float", sy
- , "float", sw
- , "float", sh
- , "int", 2
- , Ptr, ImageAttr
- , Ptr, 0
- , Ptr, 0)
- if ImageAttr
- Gdip_DisposeImageAttributes(ImageAttr)
- return E
- }
- Gdip_DrawImage(pGraphics, pBitmap, dx="", dy="", dw="", dh="", sx="", sy="", sw="", sh="", Matrix=1)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- if (Matrix&1 = "")
- ImageAttr := Gdip_SetImageAttributesColorMatrix(Matrix)
- else if (Matrix != 1)
- ImageAttr := Gdip_SetImageAttributesColorMatrix("1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|" Matrix "|0|0|0|0|0|1")
- if (sx = "" && sy = "" && sw = "" && sh = "")
- {
- if (dx = "" && dy = "" && dw = "" && dh = "")
- {
- sx := dx := 0, sy := dy := 0
- sw := dw := Gdip_GetImageWidth(pBitmap)
- sh := dh := Gdip_GetImageHeight(pBitmap)
- }
- else
- {
- sx := sy := 0
- sw := Gdip_GetImageWidth(pBitmap)
- sh := Gdip_GetImageHeight(pBitmap)
- }
- }
- E := DllCall("gdiplus\GdipDrawImageRectRect"
- , Ptr, pGraphics
- , Ptr, pBitmap
- , "float", dx
- , "float", dy
- , "float", dw
- , "float", dh
- , "float", sx
- , "float", sy
- , "float", sw
- , "float", sh
- , "int", 2
- , Ptr, ImageAttr
- , Ptr, 0
- , Ptr, 0)
- if ImageAttr
- Gdip_DisposeImageAttributes(ImageAttr)
- return E
- }
- Gdip_SetImageAttributesColorMatrix(Matrix)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- VarSetCapacity(ColourMatrix, 100, 0)
- Matrix := RegExReplace(RegExReplace(Matrix, "^[^\d-\.]+([\d\.])", "$1", "", 1), "[^\d-\.]+", "|")
- StringSplit, Matrix, Matrix, |
- Loop, 25
- {
- Matrix := (Matrix%A_Index% != "") ? Matrix%A_Index% : Mod(A_Index-1, 6) ? 0 : 1
- NumPut(Matrix, ColourMatrix, (A_Index-1)*4, "float")
- }
- DllCall("gdiplus\GdipCreateImageAttributes", A_PtrSize ? "UPtr*" : "uint*", ImageAttr)
- DllCall("gdiplus\GdipSetImageAttributesColorMatrix", Ptr, ImageAttr, "int", 1, "int", 1, Ptr, &ColourMatrix, Ptr, 0, "int", 0)
- return ImageAttr
- }
- Gdip_GraphicsFromImage(pBitmap)
- {
- DllCall("gdiplus\GdipGetImageGraphicsContext", A_PtrSize ? "UPtr" : "UInt", pBitmap, A_PtrSize ? "UPtr*" : "UInt*", pGraphics)
- return pGraphics
- }
- Gdip_GraphicsFromHDC(hdc)
- {
- DllCall("gdiplus\GdipCreateFromHDC", A_PtrSize ? "UPtr" : "UInt", hdc, A_PtrSize ? "UPtr*" : "UInt*", pGraphics)
- return pGraphics
- }
- Gdip_GetDC(pGraphics)
- {
- DllCall("gdiplus\GdipGetDC", A_PtrSize ? "UPtr" : "UInt", pGraphics, A_PtrSize ? "UPtr*" : "UInt*", hdc)
- return hdc
- }
- Gdip_ReleaseDC(pGraphics, hdc)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- return DllCall("gdiplus\GdipReleaseDC", Ptr, pGraphics, Ptr, hdc)
- }
- Gdip_GraphicsClear(pGraphics, ARGB=0x00ffffff)
- {
- return DllCall("gdiplus\GdipGraphicsClear", A_PtrSize ? "UPtr" : "UInt", pGraphics, "int", ARGB)
- }
- Gdip_BlurBitmap(pBitmap, Blur)
- {
- if (Blur > 100) || (Blur < 1)
- return -1
- sWidth := Gdip_GetImageWidth(pBitmap), sHeight := Gdip_GetImageHeight(pBitmap)
- dWidth := sWidth//Blur, dHeight := sHeight//Blur
- pBitmap1 := Gdip_CreateBitmap(dWidth, dHeight)
- G1 := Gdip_GraphicsFromImage(pBitmap1)
- Gdip_SetInterpolationMode(G1, 7)
- Gdip_DrawImage(G1, pBitmap, 0, 0, dWidth, dHeight, 0, 0, sWidth, sHeight)
- Gdip_DeleteGraphics(G1)
- pBitmap2 := Gdip_CreateBitmap(sWidth, sHeight)
- G2 := Gdip_GraphicsFromImage(pBitmap2)
- Gdip_SetInterpolationMode(G2, 7)
- Gdip_DrawImage(G2, pBitmap1, 0, 0, sWidth, sHeight, 0, 0, dWidth, dHeight)
- Gdip_DeleteGraphics(G2)
- Gdip_DisposeImage(pBitmap1)
- return pBitmap2
- }
- Gdip_SaveBitmapToFile(pBitmap, sOutput, Quality=75)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- SplitPath, sOutput,,, Extension
- if Extension not in BMP,DIB,RLE,JPG,JPEG,JPE,JFIF,GIF,TIF,TIFF,PNG
- return -1
- Extension := "." Extension
- DllCall("gdiplus\GdipGetImageEncodersSize", "uint*", nCount, "uint*", nSize)
- VarSetCapacity(ci, nSize)
- DllCall("gdiplus\GdipGetImageEncoders", "uint", nCount, "uint", nSize, Ptr, &ci)
- if !(nCount && nSize)
- return -2
- If (A_IsUnicode){
- StrGet_Name := "StrGet"
- Loop, %nCount%
- {
- sString := %StrGet_Name%(NumGet(ci, (idx := (48+7*A_PtrSize)*(A_Index-1))+32+3*A_PtrSize), "UTF-16")
- if !InStr(sString, "*" Extension)
- continue
- pCodec := &ci+idx
- break
- }
- } else {
- Loop, %nCount%
- {
- Location := NumGet(ci, 76*(A_Index-1)+44)
- nSize := DllCall("WideCharToMultiByte", "uint", 0, "uint", 0, "uint", Location, "int", -1, "uint", 0, "int", 0, "uint", 0, "uint", 0)
- VarSetCapacity(sString, nSize)
- DllCall("WideCharToMultiByte", "uint", 0, "uint", 0, "uint", Location, "int", -1, "str", sString, "int", nSize, "uint", 0, "uint", 0)
- if !InStr(sString, "*" Extension)
- continue
- pCodec := &ci+76*(A_Index-1)
- break
- }
- }
- if !pCodec
- return -3
- if (Quality != 75)
- {
- Quality := (Quality < 0) ? 0 : (Quality > 100) ? 100 : Quality
- if Extension in .JPG,.JPEG,.JPE,.JFIF
- {
- DllCall("gdiplus\GdipGetEncoderParameterListSize", Ptr, pBitmap, Ptr, pCodec, "uint*", nSize)
- VarSetCapacity(EncoderParameters, nSize, 0)
- DllCall("gdiplus\GdipGetEncoderParameterList", Ptr, pBitmap, Ptr, pCodec, "uint", nSize, Ptr, &EncoderParameters)
- Loop, % NumGet(EncoderParameters, "UInt") ;%
- {
- elem := (24+(A_PtrSize ? A_PtrSize : 4))*(A_Index-1) + 4 + (pad := A_PtrSize = 8 ? 4 : 0)
- if (NumGet(EncoderParameters, elem+16, "UInt") = 1) && (NumGet(EncoderParameters, elem+20, "UInt") = 6)
- {
- p := elem+&EncoderParameters-pad-4
- NumPut(Quality, NumGet(NumPut(4, NumPut(1, p+0)+20, "UInt")), "UInt")
- break
- }
- }
- }
- }
- if (!A_IsUnicode)
- {
- nSize := DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, Ptr, &sOutput, "int", -1, Ptr, 0, "int", 0)
- VarSetCapacity(wOutput, nSize*2)
- DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, Ptr, &sOutput, "int", -1, Ptr, &wOutput, "int", nSize)
- VarSetCapacity(wOutput, -1)
- if !VarSetCapacity(wOutput)
- return -4
- E := DllCall("gdiplus\GdipSaveImageToFile", Ptr, pBitmap, Ptr, &wOutput, Ptr, pCodec, "uint", p ? p : 0)
- }
- else
- E := DllCall("gdiplus\GdipSaveImageToFile", Ptr, pBitmap, Ptr, &sOutput, Ptr, pCodec, "uint", p ? p : 0)
- return E ? -5 : 0
- }
- Gdip_GetPixel(pBitmap, x, y)
- {
- DllCall("gdiplus\GdipBitmapGetPixel", A_PtrSize ? "UPtr" : "UInt", pBitmap, "int", x, "int", y, "uint*", ARGB)
- return ARGB
- }
- Gdip_SetPixel(pBitmap, x, y, ARGB)
- {
- return DllCall("gdiplus\GdipBitmapSetPixel", A_PtrSize ? "UPtr" : "UInt", pBitmap, "int", x, "int", y, "int", ARGB)
- }
- Gdip_GetImageWidth(pBitmap)
- {
- DllCall("gdiplus\GdipGetImageWidth", A_PtrSize ? "UPtr" : "UInt", pBitmap, "uint*", Width)
- return Width
- }
- Gdip_GetImageHeight(pBitmap)
- {
- DllCall("gdiplus\GdipGetImageHeight", A_PtrSize ? "UPtr" : "UInt", pBitmap, "uint*", Height)
- return Height
- }
- Gdip_GetImageDimensions(pBitmap, ByRef Width, ByRef Height)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- DllCall("gdiplus\GdipGetImageWidth", Ptr, pBitmap, "uint*", Width)
- DllCall("gdiplus\GdipGetImageHeight", Ptr, pBitmap, "uint*", Height)
- }
- Gdip_GetDimensions(pBitmap, ByRef Width, ByRef Height)
- {
- Gdip_GetImageDimensions(pBitmap, Width, Height)
- }
- Gdip_GetImagePixelFormat(pBitmap)
- {
- DllCall("gdiplus\GdipGetImagePixelFormat", A_PtrSize ? "UPtr" : "UInt", pBitmap, A_PtrSize ? "UPtr*" : "UInt*", Format)
- return Format
- }
- Gdip_GetDpiX(pGraphics)
- {
- DllCall("gdiplus\GdipGetDpiX", A_PtrSize ? "UPtr" : "uint", pGraphics, "float*", dpix)
- return Round(dpix)
- }
- Gdip_GetDpiY(pGraphics)
- {
- DllCall("gdiplus\GdipGetDpiY", A_PtrSize ? "UPtr" : "uint", pGraphics, "float*", dpiy)
- return Round(dpiy)
- }
- Gdip_GetImageHorizontalResolution(pBitmap)
- {
- DllCall("gdiplus\GdipGetImageHorizontalResolution", A_PtrSize ? "UPtr" : "uint", pBitmap, "float*", dpix)
- return Round(dpix)
- }
- Gdip_GetImageVerticalResolution(pBitmap)
- {
- DllCall("gdiplus\GdipGetImageVerticalResolution", A_PtrSize ? "UPtr" : "uint", pBitmap, "float*", dpiy)
- return Round(dpiy)
- }
- Gdip_BitmapSetResolution(pBitmap, dpix, dpiy)
- {
- return DllCall("gdiplus\GdipBitmapSetResolution", A_PtrSize ? "UPtr" : "uint", pBitmap, "float", dpix, "float", dpiy)
- }
- Gdip_CreateBitmapFromFile(sFile, IconNumber=1, IconSize="")
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- , PtrA := A_PtrSize ? "UPtr*" : "UInt*"
- SplitPath, sFile,,, ext
- if ext in exe,dll
- {
- Sizes := IconSize ? IconSize : 256 "|" 128 "|" 64 "|" 48 "|" 32 "|" 16
- BufSize := 16 + (2*(A_PtrSize ? A_PtrSize : 4))
- VarSetCapacity(buf, BufSize, 0)
- Loop, Parse, Sizes, |
- {
- DllCall("PrivateExtractIcons", "str", sFile, "int", IconNumber-1, "int", A_LoopField, "int", A_LoopField, PtrA, hIcon, PtrA, 0, "uint", 1, "uint", 0)
- if !hIcon
- continue
- if !DllCall("GetIconInfo", Ptr, hIcon, Ptr, &buf)
- {
- DestroyIcon(hIcon)
- continue
- }
- hbmMask := NumGet(buf, 12 + ((A_PtrSize ? A_PtrSize : 4) - 4))
- hbmColor := NumGet(buf, 12 + ((A_PtrSize ? A_PtrSize : 4) - 4) + (A_PtrSize ? A_PtrSize : 4))
- if !(hbmColor && DllCall("GetObject", Ptr, hbmColor, "int", BufSize, Ptr, &buf))
- {
- DestroyIcon(hIcon)
- continue
- }
- break
- }
- if !hIcon
- return -1
- Width := NumGet(buf, 4, "int"), Height := NumGet(buf, 8, "int")
- hbm := CreateDIBSection(Width, -Height), hdc := CreateCompatibleDC(), obm := SelectObject(hdc, hbm)
- if !DllCall("DrawIconEx", Ptr, hdc, "int", 0, "int", 0, Ptr, hIcon, "uint", Width, "uint", Height, "uint", 0, Ptr, 0, "uint", 3)
- {
- DestroyIcon(hIcon)
- return -2
- }
- VarSetCapacity(dib, 104)
- DllCall("GetObject", Ptr, hbm, "int", A_PtrSize = 8 ? 104 : 84, Ptr, &dib) ; sizeof(DIBSECTION) = 76+2*(A_PtrSize=8?4:0)+2*A_PtrSize
- Stride := NumGet(dib, 12, "Int"), Bits := NumGet(dib, 20 + (A_PtrSize = 8 ? 4 : 0)) ; padding
- DllCall("gdiplus\GdipCreateBitmapFromScan0", "int", Width, "int", Height, "int", Stride, "int", 0x26200A, Ptr, Bits, PtrA, pBitmapOld)
- pBitmap := Gdip_CreateBitmap(Width, Height)
- G := Gdip_GraphicsFromImage(pBitmap)
- , Gdip_DrawImage(G, pBitmapOld, 0, 0, Width, Height, 0, 0, Width, Height)
- SelectObject(hdc, obm), DeleteObject(hbm), DeleteDC(hdc)
- Gdip_DeleteGraphics(G), Gdip_DisposeImage(pBitmapOld)
- DestroyIcon(hIcon)
- }
- else
- {
- if (!A_IsUnicode)
- {
- VarSetCapacity(wFile, 1024)
- DllCall("kernel32\MultiByteToWideChar", "uint", 0, "uint", 0, Ptr, &sFile, "int", -1, Ptr, &wFile, "int", 512)
- DllCall("gdiplus\GdipCreateBitmapFromFile", Ptr, &wFile, PtrA, pBitmap)
- }
- else
- DllCall("gdiplus\GdipCreateBitmapFromFile", Ptr, &sFile, PtrA, pBitmap)
- }
- return pBitmap
- }
- Gdip_CreateBitmapFromHBITMAP(hBitmap, Palette=0)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- DllCall("gdiplus\GdipCreateBitmapFromHBITMAP", Ptr, hBitmap, Ptr, Palette, A_PtrSize ? "UPtr*" : "uint*", pBitmap)
- return pBitmap
- }
- Gdip_CreateHBITMAPFromBitmap(pBitmap, Background=0xffffffff)
- {
- DllCall("gdiplus\GdipCreateHBITMAPFromBitmap", A_PtrSize ? "UPtr" : "UInt", pBitmap, A_PtrSize ? "UPtr*" : "uint*", hbm, "int", Background)
- return hbm
- }
- Gdip_CreateBitmapFromHICON(hIcon)
- {
- DllCall("gdiplus\GdipCreateBitmapFromHICON", A_PtrSize ? "UPtr" : "UInt", hIcon, A_PtrSize ? "UPtr*" : "uint*", pBitmap)
- return pBitmap
- }
- Gdip_CreateHICONFromBitmap(pBitmap)
- {
- DllCall("gdiplus\GdipCreateHICONFromBitmap", A_PtrSize ? "UPtr" : "UInt", pBitmap, A_PtrSize ? "UPtr*" : "uint*", hIcon)
- return hIcon
- }
- Gdip_CreateBitmap(Width, Height, Format=0x26200A)
- {
- DllCall("gdiplus\GdipCreateBitmapFromScan0", "int", Width, "int", Height, "int", 0, "int", Format, A_PtrSize ? "UPtr" : "UInt", 0, A_PtrSize ? "UPtr*" : "uint*", pBitmap)
- Return pBitmap
- }
- Gdip_CreateBitmapFromClipboard()
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- if !DllCall("OpenClipboard", Ptr, 0)
- return -1
- if !DllCall("IsClipboardFormatAvailable", "uint", 8)
- return -2
- if !hBitmap := DllCall("GetClipboardData", "uint", 2, Ptr)
- return -3
- if !pBitmap := Gdip_CreateBitmapFromHBITMAP(hBitmap)
- return -4
- if !DllCall("CloseClipboard")
- return -5
- DeleteObject(hBitmap)
- return pBitmap
- }
- Gdip_SetBitmapToClipboard(pBitmap)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- off1 := A_PtrSize = 8 ? 52 : 44, off2 := A_PtrSize = 8 ? 32 : 24
- hBitmap := Gdip_CreateHBITMAPFromBitmap(pBitmap)
- DllCall("GetObject", Ptr, hBitmap, "int", VarSetCapacity(oi, A_PtrSize = 8 ? 104 : 84, 0), Ptr, &oi)
- hdib := DllCall("GlobalAlloc", "uint", 2, Ptr, 40+NumGet(oi, off1, "UInt"), Ptr)
- pdib := DllCall("GlobalLock", Ptr, hdib, Ptr)
- DllCall("RtlMoveMemory", Ptr, pdib, Ptr, &oi+off2, Ptr, 40)
- DllCall("RtlMoveMemory", Ptr, pdib+40, Ptr, NumGet(oi, off2 - (A_PtrSize ? A_PtrSize : 4), Ptr), Ptr, NumGet(oi, off1, "UInt"))
- DllCall("GlobalUnlock", Ptr, hdib)
- DllCall("DeleteObject", Ptr, hBitmap)
- DllCall("OpenClipboard", Ptr, 0)
- DllCall("EmptyClipboard")
- DllCall("SetClipboardData", "uint", 8, Ptr, hdib)
- DllCall("CloseClipboard")
- }
- Gdip_CloneBitmapArea(pBitmap, x, y, w, h, Format=0x26200A)
- {
- DllCall("gdiplus\GdipCloneBitmapArea"
- , "float", x
- , "float", y
- , "float", w
- , "float", h
- , "int", Format
- , A_PtrSize ? "UPtr" : "UInt", pBitmap
- , A_PtrSize ? "UPtr*" : "UInt*", pBitmapDest)
- return pBitmapDest
- }
- Gdip_CreatePen(ARGB, w)
- {
- DllCall("gdiplus\GdipCreatePen1", "UInt", ARGB, "float", w, "int", 2, A_PtrSize ? "UPtr*" : "UInt*", pPen)
- return pPen
- }
- Gdip_CreatePenFromBrush(pBrush, w)
- {
- DllCall("gdiplus\GdipCreatePen2", A_PtrSize ? "UPtr" : "UInt", pBrush, "float", w, "int", 2, A_PtrSize ? "UPtr*" : "UInt*", pPen)
- return pPen
- }
- Gdip_BrushCreateSolid(ARGB=0xff000000)
- {
- DllCall("gdiplus\GdipCreateSolidFill", "UInt", ARGB, A_PtrSize ? "UPtr*" : "UInt*", pBrush)
- return pBrush
- }
- Gdip_BrushCreateHatch(ARGBfront, ARGBback, HatchStyle=0)
- {
- DllCall("gdiplus\GdipCreateHatchBrush", "int", HatchStyle, "UInt", ARGBfront, "UInt", ARGBback, A_PtrSize ? "UPtr*" : "UInt*", pBrush)
- return pBrush
- }
- Gdip_CreateTextureBrush(pBitmap, WrapMode=1, x=0, y=0, w="", h="")
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- , PtrA := A_PtrSize ? "UPtr*" : "UInt*"
- if !(w && h)
- DllCall("gdiplus\GdipCreateTexture", Ptr, pBitmap, "int", WrapMode, PtrA, pBrush)
- else
- DllCall("gdiplus\GdipCreateTexture2", Ptr, pBitmap, "int", WrapMode, "float", x, "float", y, "float", w, "float", h, PtrA, pBrush)
- return pBrush
- }
- Gdip_CreateLineBrush(x1, y1, x2, y2, ARGB1, ARGB2, WrapMode=1)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- CreatePointF(PointF1, x1, y1), CreatePointF(PointF2, x2, y2)
- DllCall("gdiplus\GdipCreateLineBrush", Ptr, &PointF1, Ptr, &PointF2, "Uint", ARGB1, "Uint", ARGB2, "int", WrapMode, A_PtrSize ? "UPtr*" : "UInt*", LGpBrush)
- return LGpBrush
- }
- Gdip_CreateLineBrushFromRect(x, y, w, h, ARGB1, ARGB2, LinearGradientMode=1, WrapMode=1)
- {
- CreateRectF(RectF, x, y, w, h)
- DllCall("gdiplus\GdipCreateLineBrushFromRect", A_PtrSize ? "UPtr" : "UInt", &RectF, "int", ARGB1, "int", ARGB2, "int", LinearGradientMode, "int", WrapMode, A_PtrSize ? "UPtr*" : "UInt*", LGpBrush)
- return LGpBrush
- }
- Gdip_CloneBrush(pBrush)
- {
- DllCall("gdiplus\GdipCloneBrush", A_PtrSize ? "UPtr" : "UInt", pBrush, A_PtrSize ? "UPtr*" : "UInt*", pBrushClone)
- return pBrushClone
- }
- Gdip_DeletePen(pPen)
- {
- return DllCall("gdiplus\GdipDeletePen", A_PtrSize ? "UPtr" : "UInt", pPen)
- }
- Gdip_DeleteBrush(pBrush)
- {
- return DllCall("gdiplus\GdipDeleteBrush", A_PtrSize ? "UPtr" : "UInt", pBrush)
- }
- Gdip_DisposeImage(pBitmap)
- {
- return DllCall("gdiplus\GdipDisposeImage", A_PtrSize ? "UPtr" : "UInt", pBitmap)
- }
- Gdip_DeleteGraphics(pGraphics)
- {
- return DllCall("gdiplus\GdipDeleteGraphics", A_PtrSize ? "UPtr" : "UInt", pGraphics)
- }
- Gdip_DisposeImageAttributes(ImageAttr)
- {
- return DllCall("gdiplus\GdipDisposeImageAttributes", A_PtrSize ? "UPtr" : "UInt", ImageAttr)
- }
- Gdip_DeleteFont(hFont)
- {
- return DllCall("gdiplus\GdipDeleteFont", A_PtrSize ? "UPtr" : "UInt", hFont)
- }
- Gdip_DeleteStringFormat(hFormat)
- {
- return DllCall("gdiplus\GdipDeleteStringFormat", A_PtrSize ? "UPtr" : "UInt", hFormat)
- }
- Gdip_DeleteFontFamily(hFamily)
- {
- return DllCall("gdiplus\GdipDeleteFontFamily", A_PtrSize ? "UPtr" : "UInt", hFamily)
- }
- Gdip_DeleteMatrix(Matrix)
- {
- return DllCall("gdiplus\GdipDeleteMatrix", A_PtrSize ? "UPtr" : "UInt", Matrix)
- }
- Gdip_TextToGraphics(pGraphics, Text, Options, Font="Arial", Width="", Height="", Measure=0)
- {
- IWidth := Width, IHeight:= Height
- RegExMatch(Options, "i)X([\-\d\.]+)(p*)", xpos)
- RegExMatch(Options, "i)Y([\-\d\.]+)(p*)", ypos)
- RegExMatch(Options, "i)W([\-\d\.]+)(p*)", Width)
- RegExMatch(Options, "i)H([\-\d\.]+)(p*)", Height)
- RegExMatch(Options, "i)C(?!(entre|enter))([a-f\d]+)", Colour)
- RegExMatch(Options, "i)Top|Up|Bottom|Down|vCentre|vCenter", vPos)
- RegExMatch(Options, "i)NoWrap", NoWrap)
- RegExMatch(Options, "i)R(\d)", Rendering)
- RegExMatch(Options, "i)S(\d+)(p*)", Size)
- if !Gdip_DeleteBrush(Gdip_CloneBrush(Colour2))
- PassBrush := 1, pBrush := Colour2
- if !(IWidth && IHeight) && (xpos2 || ypos2 || Width2 || Height2 || Size2)
- return -1
- Style := 0, Styles := "Regular|Bold|Italic|BoldItalic|Underline|Strikeout"
- Loop, Parse, Styles, |
- {
- if RegExMatch(Options, "\b" A_loopField)
- Style |= (A_LoopField != "StrikeOut") ? (A_Index-1) : 8
- }
- Align := 0, Alignments := "Near|Left|Centre|Center|Far|Right"
- Loop, Parse, Alignments, |
- {
- if RegExMatch(Options, "\b" A_loopField)
- Align |= A_Index//2.1 ; 0|0|1|1|2|2
- }
- xpos := (xpos1 != "") ? xpos2 ? IWidth*(xpos1/100) : xpos1 : 0
- ypos := (ypos1 != "") ? ypos2 ? IHeight*(ypos1/100) : ypos1 : 0
- Width := Width1 ? Width2 ? IWidth*(Width1/100) : Width1 : IWidth
- Height := Height1 ? Height2 ? IHeight*(Height1/100) : Height1 : IHeight
- if !PassBrush
- Colour := "0x" (Colour2 ? Colour2 : "ff000000")
- Rendering := ((Rendering1 >= 0) && (Rendering1 <= 5)) ? Rendering1 : 4
- Size := (Size1 > 0) ? Size2 ? IHeight*(Size1/100) : Size1 : 12
- hFamily := Gdip_FontFamilyCreate(Font)
- hFont := Gdip_FontCreate(hFamily, Size, Style)
- FormatStyle := NoWrap ? 0x4000 | 0x1000 : 0x4000
- hFormat := Gdip_StringFormatCreate(FormatStyle)
- pBrush := PassBrush ? pBrush : Gdip_BrushCreateSolid(Colour)
- if !(hFamily && hFont && hFormat && pBrush && pGraphics)
- return !pGraphics ? -2 : !hFamily ? -3 : !hFont ? -4 : !hFormat ? -5 : !pBrush ? -6 : 0
- CreateRectF(RC, xpos, ypos, Width, Height)
- Gdip_SetStringFormatAlign(hFormat, Align)
- Gdip_SetTextRenderingHint(pGraphics, Rendering)
- ReturnRC := Gdip_MeasureString(pGraphics, Text, hFont, hFormat, RC)
- if vPos
- {
- StringSplit, ReturnRC, ReturnRC, |
- if (vPos = "vCentre") || (vPos = "vCenter")
- ypos += (Height-ReturnRC4)//2
- else if (vPos = "Top") || (vPos = "Up")
- ypos := 0
- else if (vPos = "Bottom") || (vPos = "Down")
- ypos := Height-ReturnRC4
- CreateRectF(RC, xpos, ypos, Width, ReturnRC4)
- ReturnRC := Gdip_MeasureString(pGraphics, Text, hFont, hFormat, RC)
- }
- if !Measure
- E := Gdip_DrawString(pGraphics, Text, hFont, hFormat, pBrush, RC)
- if !PassBrush
- Gdip_DeleteBrush(pBrush)
- Gdip_DeleteStringFormat(hFormat)
- Gdip_DeleteFont(hFont)
- Gdip_DeleteFontFamily(hFamily)
- return E ? E : ReturnRC
- }
- Gdip_DrawString(pGraphics, sString, hFont, hFormat, pBrush, ByRef RectF)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- if (!A_IsUnicode)
- {
- nSize := DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, Ptr, &sString, "int", -1, Ptr, 0, "int", 0)
- VarSetCapacity(wString, nSize*2)
- DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, Ptr, &sString, "int", -1, Ptr, &wString, "int", nSize)
- }
- return DllCall("gdiplus\GdipDrawString"
- , Ptr, pGraphics
- , Ptr, A_IsUnicode ? &sString : &wString
- , "int", -1
- , Ptr, hFont
- , Ptr, &RectF
- , Ptr, hFormat
- , Ptr, pBrush)
- }
- Gdip_MeasureString(pGraphics, sString, hFont, hFormat, ByRef RectF)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- VarSetCapacity(RC, 16)
- if !A_IsUnicode
- {
- nSize := DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, Ptr, &sString, "int", -1, "uint", 0, "int", 0)
- VarSetCapacity(wString, nSize*2)
- DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, Ptr, &sString, "int", -1, Ptr, &wString, "int", nSize)
- }
- DllCall("gdiplus\GdipMeasureString"
- , Ptr, pGraphics
- , Ptr, A_IsUnicode ? &sString : &wString
- , "int", -1
- , Ptr, hFont
- , Ptr, &RectF
- , Ptr, hFormat
- , Ptr, &RC
- , "uint*", Chars
- , "uint*", Lines)
- return &RC ? NumGet(RC, 0, "float") "|" NumGet(RC, 4, "float") "|" NumGet(RC, 8, "float") "|" NumGet(RC, 12, "float") "|" Chars "|" Lines : 0
- }
- Gdip_SetStringFormatAlign(hFormat, Align)
- {
- return DllCall("gdiplus\GdipSetStringFormatAlign", A_PtrSize ? "UPtr" : "UInt", hFormat, "int", Align)
- }
- Gdip_StringFormatCreate(Format=0, Lang=0)
- {
- DllCall("gdiplus\GdipCreateStringFormat", "int", Format, "int", Lang, A_PtrSize ? "UPtr*" : "UInt*", hFormat)
- return hFormat
- }
- Gdip_FontCreate(hFamily, Size, Style=0)
- {
- DllCall("gdiplus\GdipCreateFont", A_PtrSize ? "UPtr" : "UInt", hFamily, "float", Size, "int", Style, "int", 0, A_PtrSize ? "UPtr*" : "UInt*", hFont)
- return hFont
- }
- Gdip_FontFamilyCreate(Font)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- if (!A_IsUnicode)
- {
- nSize := DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, Ptr, &Font, "int", -1, "uint", 0, "int", 0)
- VarSetCapacity(wFont, nSize*2)
- DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, Ptr, &Font, "int", -1, Ptr, &wFont, "int", nSize)
- }
- DllCall("gdiplus\GdipCreateFontFamilyFromName"
- , Ptr, A_IsUnicode ? &Font : &wFont
- , "uint", 0
- , A_PtrSize ? "UPtr*" : "UInt*", hFamily)
- return hFamily
- }
- Gdip_CreateAffineMatrix(m11, m12, m21, m22, x, y)
- {
- DllCall("gdiplus\GdipCreateMatrix2", "float", m11, "float", m12, "float", m21, "float", m22, "float", x, "float", y, A_PtrSize ? "UPtr*" : "UInt*", Matrix)
- return Matrix
- }
- Gdip_CreateMatrix()
- {
- DllCall("gdiplus\GdipCreateMatrix", A_PtrSize ? "UPtr*" : "UInt*", Matrix)
- return Matrix
- }
- Gdip_CreatePath(BrushMode=0)
- {
- DllCall("gdiplus\GdipCreatePath", "int", BrushMode, A_PtrSize ? "UPtr*" : "UInt*", Path)
- return Path
- }
- Gdip_AddPathEllipse(Path, x, y, w, h)
- {
- return DllCall("gdiplus\GdipAddPathEllipse", A_PtrSize ? "UPtr" : "UInt", Path, "float", x, "float", y, "float", w, "float", h)
- }
- Gdip_AddPathPolygon(Path, Points)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- StringSplit, Points, Points, |
- VarSetCapacity(PointF, 8*Points0)
- Loop, %Points0%
- {
- StringSplit, Coord, Points%A_Index%, `,
- NumPut(Coord1, PointF, 8*(A_Index-1), "float"), NumPut(Coord2, PointF, (8*(A_Index-1))+4, "float")
- }
- return DllCall("gdiplus\GdipAddPathPolygon", Ptr, Path, Ptr, &PointF, "int", Points0)
- }
- Gdip_DeletePath(Path)
- {
- return DllCall("gdiplus\GdipDeletePath", A_PtrSize ? "UPtr" : "UInt", Path)
- }
- Gdip_SetTextRenderingHint(pGraphics, RenderingHint)
- {
- return DllCall("gdiplus\GdipSetTextRenderingHint", A_PtrSize ? "UPtr" : "UInt", pGraphics, "int", RenderingHint)
- }
- Gdip_SetInterpolationMode(pGraphics, InterpolationMode)
- {
- return DllCall("gdiplus\GdipSetInterpolationMode", A_PtrSize ? "UPtr" : "UInt", pGraphics, "int", InterpolationMode)
- }
- Gdip_SetSmoothingMode(pGraphics, SmoothingMode)
- {
- return DllCall("gdiplus\GdipSetSmoothingMode", A_PtrSize ? "UPtr" : "UInt", pGraphics, "int", SmoothingMode)
- }
- Gdip_SetCompositingMode(pGraphics, CompositingMode=0)
- {
- return DllCall("gdiplus\GdipSetCompositingMode", A_PtrSize ? "UPtr" : "UInt", pGraphics, "int", CompositingMode)
- }
- Gdip_Startup()
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- if !DllCall("GetModuleHandle", "str", "gdiplus", Ptr)
- DllCall("LoadLibrary", "str", "gdiplus")
- VarSetCapacity(si, A_PtrSize = 8 ? 24 : 16, 0), si := Chr(1)
- DllCall("gdiplus\GdiplusStartup", A_PtrSize ? "UPtr*" : "uint*", pToken, Ptr, &si, Ptr, 0)
- return pToken
- }
- Gdip_Shutdown(pToken)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- DllCall("gdiplus\GdiplusShutdown", Ptr, pToken)
- if hModule := DllCall("GetModuleHandle", "str", "gdiplus", Ptr)
- DllCall("FreeLibrary", Ptr, hModule)
- return 0
- }
- Gdip_RotateWorldTransform(pGraphics, Angle, MatrixOrder=0)
- {
- return DllCall("gdiplus\GdipRotateWorldTransform", A_PtrSize ? "UPtr" : "UInt", pGraphics, "float", Angle, "int", MatrixOrder)
- }
- Gdip_ScaleWorldTransform(pGraphics, x, y, MatrixOrder=0)
- {
- return DllCall("gdiplus\GdipScaleWorldTransform", A_PtrSize ? "UPtr" : "UInt", pGraphics, "float", x, "float", y, "int", MatrixOrder)
- }
- Gdip_TranslateWorldTransform(pGraphics, x, y, MatrixOrder=0)
- {
- return DllCall("gdiplus\GdipTranslateWorldTransform", A_PtrSize ? "UPtr" : "UInt", pGraphics, "float", x, "float", y, "int", MatrixOrder)
- }
- Gdip_ResetWorldTransform(pGraphics)
- {
- return DllCall("gdiplus\GdipResetWorldTransform", A_PtrSize ? "UPtr" : "UInt", pGraphics)
- }
- Gdip_GetRotatedTranslation(Width, Height, Angle, ByRef xTranslation, ByRef yTranslation)
- {
- pi := 3.14159, TAngle := Angle*(pi/180)
- Bound := (Angle >= 0) ? Mod(Angle, 360) : 360-Mod(-Angle, -360)
- if ((Bound >= 0) && (Bound <= 90))
- xTranslation := Height*Sin(TAngle), yTranslation := 0
- else if ((Bound > 90) && (Bound <= 180))
- xTranslation := (Height*Sin(TAngle))-(Width*Cos(TAngle)), yTranslation := -Height*Cos(TAngle)
- else if ((Bound > 180) && (Bound <= 270))
- xTranslation := -(Width*Cos(TAngle)), yTranslation := -(Height*Cos(TAngle))-(Width*Sin(TAngle))
- else if ((Bound > 270) && (Bound <= 360))
- xTranslation := 0, yTranslation := -Width*Sin(TAngle)
- }
- Gdip_GetRotatedDimensions(Width, Height, Angle, ByRef RWidth, ByRef RHeight)
- {
- pi := 3.14159, TAngle := Angle*(pi/180)
- if !(Width && Height)
- return -1
- RWidth := Ceil(Abs(Width*Cos(TAngle))+Abs(Height*Sin(TAngle)))
- RHeight := Ceil(Abs(Width*Sin(TAngle))+Abs(Height*Cos(Tangle)))
- }
- Gdip_ImageRotateFlip(pBitmap, RotateFlipType=1)
- {
- return DllCall("gdiplus\GdipImageRotateFlip", A_PtrSize ? "UPtr" : "UInt", pBitmap, "int", RotateFlipType)
- }
- Gdip_SetClipRect(pGraphics, x, y, w, h, CombineMode=0)
- {
- return DllCall("gdiplus\GdipSetClipRect", A_PtrSize ? "UPtr" : "UInt", pGraphics, "float", x, "float", y, "float", w, "float", h, "int", CombineMode)
- }
- Gdip_SetClipPath(pGraphics, Path, CombineMode=0)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- return DllCall("gdiplus\GdipSetClipPath", Ptr, pGraphics, Ptr, Path, "int", CombineMode)
- }
- Gdip_ResetClip(pGraphics)
- {
- return DllCall("gdiplus\GdipResetClip", A_PtrSize ? "UPtr" : "UInt", pGraphics)
- }
- Gdip_GetClipRegion(pGraphics)
- {
- Region := Gdip_CreateRegion()
- DllCall("gdiplus\GdipGetClip", A_PtrSize ? "UPtr" : "UInt", pGraphics, "UInt*", Region)
- return Region
- }
- Gdip_SetClipRegion(pGraphics, Region, CombineMode=0)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- return DllCall("gdiplus\GdipSetClipRegion", Ptr, pGraphics, Ptr, Region, "int", CombineMode)
- }
- Gdip_CreateRegion()
- {
- DllCall("gdiplus\GdipCreateRegion", "UInt*", Region)
- return Region
- }
- Gdip_DeleteRegion(Region)
- {
- return DllCall("gdiplus\GdipDeleteRegion", A_PtrSize ? "UPtr" : "UInt", Region)
- }
- Gdip_LockBits(pBitmap, x, y, w, h, ByRef Stride, ByRef Scan0, ByRef BitmapData, LockMode = 3, PixelFormat = 0x26200a)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- CreateRect(Rect, x, y, w, h)
- VarSetCapacity(BitmapData, 16+2*(A_PtrSize ? A_PtrSize : 4), 0)
- E := DllCall("Gdiplus\GdipBitmapLockBits", Ptr, pBitmap, Ptr, &Rect, "uint", LockMode, "int", PixelFormat, Ptr, &BitmapData)
- Stride := NumGet(BitmapData, 8, "Int")
- Scan0 := NumGet(BitmapData, 16, Ptr)
- return E
- }
- Gdip_UnlockBits(pBitmap, ByRef BitmapData)
- {
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- return DllCall("Gdiplus\GdipBitmapUnlockBits", Ptr, pBitmap, Ptr, &BitmapData)
- }
- Gdip_SetLockBitPixel(ARGB, Scan0, x, y, Stride)
- {
- Numput(ARGB, Scan0+0, (x*4)+(y*Stride), "UInt")
- }
- Gdip_GetLockBitPixel(Scan0, x, y, Stride)
- {
- return NumGet(Scan0+0, (x*4)+(y*Stride), "UInt")
- }
- Gdip_PixelateBitmap(pBitmap, ByRef pBitmapOut, BlockSize)
- {
- static PixelateBitmap
- Ptr := A_PtrSize ? "UPtr" : "UInt"
- if (!PixelateBitmap)
- {
- if A_PtrSize != 8 ; x86 machine code
- MCode_PixelateBitmap =
- (LTrim Join
- 558BEC83EC3C8B4514538B5D1C99F7FB56578BC88955EC894DD885C90F8E830200008B451099F7FB8365DC008365E000894DC88955F08945E833FF897DD4
- 397DE80F8E160100008BCB0FAFCB894DCC33C08945F88945FC89451C8945143BD87E608B45088D50028BC82BCA8BF02BF2418945F48B45E02955F4894DC4
- 8D0CB80FAFCB03CA895DD08BD1895DE40FB64416030145140FB60201451C8B45C40FB604100145FC8B45F40FB604020145F883C204FF4DE475D6034D18FF
- 4DD075C98B4DCC8B451499F7F98945148B451C99F7F989451C8B45FC99F7F98945FC8B45F899F7F98945F885DB7E648B450C8D50028BC82BCA83C103894D
- C48BC82BCA41894DF48B4DD48945E48B45E02955E48D0C880FAFCB03CA895DD08BD18BF38A45148B7DC48804178A451C8B7DF488028A45FC8804178A45F8
- 8B7DE488043A83C2044E75DA034D18FF4DD075CE8B4DCC8B7DD447897DD43B7DE80F8CF2FEFFFF837DF0000F842C01000033C08945F88945FC89451C8945
- 148945E43BD87E65837DF0007E578B4DDC034DE48B75E80FAF4D180FAFF38B45088D500203CA8D0CB18BF08BF88945F48B45F02BF22BFA2955F48945CC0F
- B6440E030145140FB60101451C0FB6440F010145FC8B45F40FB604010145F883C104FF4DCC75D8FF45E4395DE47C9B8B4DF00FAFCB85C9740B8B451499F7
- F9894514EB048365140033F63BCE740B8B451C99F7F989451CEB0389751C3BCE740B8B45FC99F7F98945FCEB038975FC3BCE740B8B45F899F7F98945F8EB
- 038975F88975E43BDE7E5A837DF0007E4C8B4DDC034DE48B75E80FAF4D180FAFF38B450C8D500203CA8D0CB18BF08BF82BF22BFA2BC28B55F08955CC8A55
- 1488540E038A551C88118A55FC88540F018A55F888140183C104FF4DCC75DFFF45E4395DE47CA68B45180145E0015DDCFF4DC80F8594FDFFFF8B451099F7
- FB8955F08945E885C00F8E450100008B45EC0FAFC38365DC008945D48B45E88945CC33C08945F88945FC89451C8945148945103945EC7E6085DB7E518B4D
- D88B45080FAFCB034D108D50020FAF4D18034DDC8BF08BF88945F403CA2BF22BFA2955F4895DC80FB6440E030145140FB60101451C0FB6440F010145FC8B
- 45F40FB604080145F883C104FF4DC875D8FF45108B45103B45EC7CA08B4DD485C9740B8B451499F7F9894514EB048365140033F63BCE740B8B451C99F7F9
- 89451CEB0389751C3BCE740B8B45FC99F7F98945FCEB038975FC3BCE740B8B45F899F7F98945F8EB038975F88975103975EC7E5585DB7E468B4DD88B450C
- 0FAFCB034D108D50020FAF4D18034DDC8BF08BF803CA2BF22BFA2BC2895DC88A551488540E038A551C88118A55FC88540F018A55F888140183C104FF4DC8
- 75DFFF45108B45103B45EC7CAB8BC3C1E0020145DCFF4DCC0F85CEFEFFFF8B4DEC33C08945F88945FC89451C8945148945103BC87E6C3945F07E5C8B4DD8
- 8B75E80FAFCB034D100FAFF30FAF4D188B45088D500203CA8D0CB18BF08BF88945F48B45F02BF22BFA2955F48945C80FB6440E030145140FB60101451C0F
- B6440F010145FC8B45F40FB604010145F883C104FF4DC875D833C0FF45108B4DEC394D107C940FAF4DF03BC874068B451499F7F933F68945143BCE740B8B
- 451C99F7F989451CEB0389751C3BCE740B8B45FC99F7F98945FCEB038975FC3BCE740B8B45F899F7F98945F8EB038975F88975083975EC7E63EB0233F639
- 75F07E4F8B4DD88B75E80FAFCB034D080FAFF30FAF4D188B450C8D500203CA8D0CB18BF08BF82BF22BFA2BC28B55F08955108A551488540E038A551C8811
- 8A55FC88540F018A55F888140883C104FF4D1075DFFF45088B45083B45EC7C9F5F5E33C05BC9C21800
- )
- else ; x64 machine code
- MCode_PixelateBitmap =
- (LTrim Join
- 4489442418488954241048894C24085355565741544155415641574883EC28418BC1448B8C24980000004C8BDA99488BD941F7F9448BD0448BFA8954240C
- 448994248800000085C00F8E9D020000418BC04533E4458BF299448924244C8954241041F7F933C9898C24980000008BEA89542404448BE889442408EB05
- 4C8B5C24784585ED0F8E1A010000458BF1418BFD48897C2418450FAFF14533D233F633ED4533E44533ED4585C97E5B4C63BC2490000000418D040A410FAF
- C148984C8D441802498BD9498BD04D8BD90FB642010FB64AFF4403E80FB60203E90FB64AFE4883C2044403E003F149FFCB75DE4D03C748FFCB75D0488B7C
- 24188B8C24980000004C8B5C2478418BC59941F7FE448BE8418BC49941F7FE448BE08BC59941F7FE8BE88BC69941F7FE8BF04585C97E4048639C24900000
- 004103CA4D8BC1410FAFC94863C94A8D541902488BCA498BC144886901448821408869FF408871FE4883C10448FFC875E84803D349FFC875DA8B8C249800
- 0000488B5C24704C8B5C24784183C20448FFCF48897C24180F850AFFFFFF8B6C2404448B2424448B6C24084C8B74241085ED0F840A01000033FF33DB4533
- DB4533D24533C04585C97E53488B74247085ED7E42438D0C04418BC50FAF8C2490000000410FAFC18D04814863C8488D5431028BCD0FB642014403D00FB6
- 024883C2044403D80FB642FB03D80FB642FA03F848FFC975DE41FFC0453BC17CB28BCD410FAFC985C9740A418BC299F7F98BF0EB0233F685C9740B418BC3
- 99F7F9448BD8EB034533DB85C9740A8BC399F7F9448BD0EB034533D285C9740A8BC799F7F9448BC0EB034533C033D24585C97E4D4C8B74247885ED7E3841
- 8D0C14418BC50FAF8C2490000000410FAFC18D04814863C84A8D4431028BCD40887001448818448850FF448840FE4883C00448FFC975E8FFC2413BD17CBD
- 4C8B7424108B8C2498000000038C2490000000488B5C24704503E149FFCE44892424898C24980000004C897424100F859EFDFFFF448B7C240C448B842480
- 000000418BC09941F7F98BE8448BEA89942498000000896C240C85C00F8E3B010000448BAC2488000000418BCF448BF5410FAFC9898C248000000033FF33
- ED33F64533DB4533D24533C04585FF7E524585C97E40418BC5410FAFC14103C00FAF84249000000003C74898488D541802498BD90FB642014403D00FB602
- 4883C2044403D80FB642FB03F00FB642FA03E848FFCB75DE488B5C247041FFC0453BC77CAE85C9740B418BC299F7F9448BE0EB034533E485C9740A418BC3
- 99F7F98BD8EB0233DB85C9740A8BC699F7F9448BD8EB034533DB85C9740A8BC599F7F9448BD0EB034533D24533C04585FF7E4E488B4C24784585C97E3541
- 8BC5410FAFC14103C00FAF84249000000003C74898488D540802498BC144886201881A44885AFF448852FE4883C20448FFC875E941FFC0453BC77CBE8B8C
- 2480000000488B5C2470418BC1C1E00203F849FFCE0F85ECFEFFFF448BAC24980000008B6C240C448BA4248800000033FF33DB4533DB4533D24533C04585
- FF7E5A488B7424704585ED7E48418BCC8BC5410FAFC94103C80FAF8C2490000000410FAFC18D04814863C8488D543102418BCD0FB642014403D00FB60248
- 83C2044403D80FB642FB03D80FB642FA03F848FFC975DE41FFC0453BC77CAB418BCF410FAFCD85C9740A418BC299F7F98BF0EB0233F685C9740B418BC399
- F7F9448BD8EB034533DB85C9740A8BC399F7F9448BD0EB034533D285C9740A8BC799F7F9448BC0EB034533C033D24585FF7E4E4585ED7E42418BCC8BC541
- 0FAFC903CA0FAF8C2490000000410FAFC18D04814863C8488B442478488D440102418BCD40887001448818448850FF448840FE4883C00448FFC975E8FFC2
- 413BD77CB233C04883C428415F415E415D415C5F5E5D5BC3
- )
- VarSetCapacity(PixelateBitmap, StrLen(MCode_PixelateBitmap)//2)
- Loop % StrLen(MCode_PixelateBitmap)//2 ;%
- NumPut("0x" SubStr(MCode_PixelateBitmap, (2*A_Index)-1, 2), PixelateBitmap, A_Index-1, "UChar")
- DllCall("VirtualProtect", Ptr, &PixelateBitmap, Ptr, VarSetCapacity(PixelateBitmap), "uint", 0x40, A_PtrSize ? "UPtr*" : "UInt*", 0)
- }
- Gdip_GetImageDimensions(pBitmap, Width, Height)
- if (Width != Gdip_GetImageWidth(pBitmapOut) || Height != Gdip_GetImageHeight(pBitmapOut))
- return -1
- if (BlockSize > Width || BlockSize > Height)
- return -2
- E1 := Gdip_LockBits(pBitmap, 0, 0, Width, Height, Stride1, Scan01, BitmapData1)
- E2 := Gdip_LockBits(pBitmapOut, 0, 0, Width, Height, Stride2, Scan02, BitmapData2)
- if (E1 || E2)
- return -3
- E := DllCall(&PixelateBitmap, Ptr, Scan01, Ptr, Scan02, "int", Width, "int", Height, "int", Stride1, "int", BlockSize)
- Gdip_UnlockBits(pBitmap, BitmapData1), Gdip_UnlockBits(pBitmapOut, BitmapData2)
- return 0
- }
- Gdip_ToARGB(A, R, G, B)
- {
- return (A << 24) | (R << 16) | (G << 8) | B
- }
- Gdip_FromARGB(ARGB, ByRef A, ByRef R, ByRef G, ByRef B)
- {
- A := (0xff000000 & ARGB) >> 24
- R := (0x00ff0000 & ARGB) >> 16
- G := (0x0000ff00 & ARGB) >> 8
- B := 0x000000ff & ARGB
- }
- Gdip_AFromARGB(ARGB)
- {
- return (0xff000000 & ARGB) >> 24
- }
- Gdip_RFromARGB(ARGB)
- {
- return (0x00ff0000 & ARGB) >> 16
- }
- Gdip_GFromARGB(ARGB)
- {
- return (0x0000ff00 & ARGB) >> 8
- }
- Gdip_BFromARGB(ARGB)
- {
- return 0x000000ff & ARGB
- }
- StrGetB(Address, Length=-1, Encoding=0)
- {
- if Length is not integer
- Encoding := Length, Length := -1
- if (Address+0 < 1024)
- return
- if Encoding = UTF-16
- Encoding = 1200
- else if Encoding = UTF-8
- Encoding = 65001
- else if SubStr(Encoding,1,2)="CP"
- Encoding := SubStr(Encoding,3)
- if !Encoding ; "" or 0
- {
- if (Length == -1)
- Length := DllCall("lstrlen", "uint", Address)
- VarSetCapacity(String, Length)
- DllCall("lstrcpyn", "str", String, "uint", Address, "int", Length + 1)
- }
- else if Encoding = 1200 ; UTF-16
- {
- char_count := DllCall("WideCharToMultiByte", "uint", 0, "uint", 0x400, "uint", Address, "int", Length, "uint", 0, "uint", 0, "uint", 0, "uint", 0)
- VarSetCapacity(String, char_count)
- DllCall("WideCharToMultiByte", "uint", 0, "uint", 0x400, "uint", Address, "int", Length, "str", String, "int", char_count, "uint", 0, "uint", 0)
- }
- else if Encoding is integer
- {
- char_count := DllCall("MultiByteToWideChar", "uint", Encoding, "uint", 0, "uint", Address, "int", Length, "uint", 0, "int", 0)
- VarSetCapacity(String, char_count * 2)
- char_count := DllCall("MultiByteToWideChar", "uint", Encoding, "uint", 0, "uint", Address, "int", Length, "uint", &String, "int", char_count * 2)
- String := StrGetB(&String, char_count, 1200)
- }
- return String
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement