Code: Select all
UsePNGImageDecoder()
Global ico = CatchImage(#PB_Any, ?i, 1150)
Global png = CatchImage(#PB_Any, ?p, 582)
Global Window_0,Window_1,Window_2,Window_3
Global Parent
Macro UpdateWindow(Window, State = 1)
CompilerIf #PB_Compiler_OS=#PB_OS_Windows
SendMessage_(WindowID(Window),#WM_SETREDRAW,State,0)
If State
RedrawWindow_(WindowID(Window),0,0,#RDW_ALLCHILDREN|#RDW_UPDATENOW)
InvalidateRect_(WindowID(Window),0,0)
UpdateWindow_(WindowID(Window))
EndIf
CompilerEndIf
EndMacro
;----------------------------------------
Procedure MosaicImage(Gadget,*Image) ;Ok
Protected x,y,w,h
Static iw,ih,CreateImage :If IsImage(CreateImage) :FreeImage(CreateImage) :EndIf
Image=PeekL(*Image)
If Not IsImage(Image)
Debug "нужен указатель на рисунок @"
EndIf
If IsImage(Image) And IsGadget(Gadget) And (ImageWidth(Image) & ImageHeight(Image))
w=GadgetWidth(Gadget)
h=GadgetHeight(Gadget)
;If w&h
Debug 66
iw=ImageWidth(Image)
ih=ImageHeight(Image)
;EndIf
CreateImage=CreateImage(#PB_Any,w+1, h+1,32,#PB_Image_Transparent)
If (ImageWidth(Image) & ImageHeight(Image)) And StartDrawing(ImageOutput(CreateImage))
DrawingMode(#PB_2DDrawing_AlphaChannel|#PB_2DDrawing_AllChannels) ;DrawingMode(#PB_2DDrawing_AlphaBlend)
For x = 0 To OutputWidth()-1
For y = 0 To OutputHeight()-1
DrawAlphaImage(ImageID(Image),x,y)
y+ih
Next
x+iw
Next
StopDrawing()
EndIf
PokeL(*Image, PeekL(@CreateImage))
ProcedureReturn CreateImage
EndIf
EndProcedure
Procedure StretchImage(Gadget,*Image,Mode=#PB_Image_Raw) ;Ok
Protected w,h
Static CopyImage :If IsImage(CopyImage) :FreeImage(CopyImage) :EndIf
Image=PeekL(*Image)
If IsImage(Image) And IsGadget(Gadget) And (ImageWidth(Image) & ImageHeight(Image))
CopyImage=CopyImage(Image,#PB_Any)
w=GadgetWidth(Gadget)
h=GadgetHeight(Gadget)
ResizeImage(CopyImage,w,h,Mode)
PokeL(*Image, PeekL(@CopyImage))
ProcedureReturn CopyImage
EndIf
EndProcedure
Procedure CenterImage(Gadget,*Image) ;Ok
Protected w,h,x,y
Static CreateImage :If IsImage(CreateImage) :FreeImage(CreateImage) :EndIf
Image=PeekL(*Image)
If Not IsImage(Image)
Debug "нужен указатель на рисунок @"
EndIf
If IsImage(Image)
w=GadgetWidth(Gadget)
h=GadgetHeight(Gadget)
x=(w-ImageWidth(Image))/2
y=(h-ImageHeight(Image))/2
CreateImage=CreateImage(#PB_Any,w+1, h+1,32,#PB_Image_Transparent)
If (ImageWidth(Image) & ImageHeight(Image)) And StartDrawing(ImageOutput(CreateImage))
DrawingMode(#PB_2DDrawing_AlphaChannel|#PB_2DDrawing_AllChannels)
DrawAlphaImage(ImageID(Image),x,y)
StopDrawing()
PokeL(*Image, PeekL(@CreateImage))
ProcedureReturn CreateImage
EndIf
EndIf
EndProcedure
Procedure ProportionalImage(Gadget,*Image,Mode=#PB_Image_Raw) ;Ok
Protected w,h,x,y
Static CopyImage :If IsImage(CopyImage) :FreeImage(CopyImage) :EndIf
Static CreateImage :If IsImage(CreateImage) :FreeImage(CreateImage) :EndIf
Image=PeekL(*Image)
If Not IsImage(Image)
Debug "нужен указатель на рисунок @"
EndIf
If IsImage(Image) And IsGadget(Gadget) And (ImageWidth(Image) & ImageHeight(Image))
w=GadgetWidth(Gadget)
h=GadgetHeight(Gadget)
CopyImage=CopyImage(Image,#PB_Any)
CreateImage=CreateImage(#PB_Any,w+1, h+1,32,#PB_Image_Transparent)
If w>h :ResizeImage(CopyImage,h,h,Mode) :Else :ResizeImage(CopyImage,w,w,Mode) :EndIf
x=(w-ImageWidth(CopyImage))/2
y=(h-ImageHeight(CopyImage))/2
If (ImageWidth(CopyImage) & ImageHeight(CopyImage)) And StartDrawing(ImageOutput(CreateImage))
DrawingMode(#PB_2DDrawing_AlphaChannel|#PB_2DDrawing_AllChannels)
DrawAlphaImage(ImageID(CopyImage),x,y)
StopDrawing()
EndIf
PokeL(*Image, PeekL(@CreateImage))
ProcedureReturn CreateImage
EndIf
EndProcedure
Procedure SetImage(Gadget,Image)
If GadgetType(Gadget)= #PB_GadgetType_ButtonImage
SetGadgetAttribute(Gadget,#PB_Button_Image,ImageID(Image))
ElseIf GadgetType(Gadget)= #PB_GadgetType_Image
SetGadgetState(Gadget,ImageID(Image))
ElseIf GadgetType(Gadget)= #PB_GadgetType_Canvas
SetGadgetAttribute(Gadget,#PB_Button_Image,ImageID(Image))
EndIf
EndProcedure
Procedure GetImage(Gadget)
If GadgetType(Gadget)= #PB_GadgetType_ButtonImage
ProcedureReturn GetGadgetAttribute(Gadget,#PB_Button_Image)
ElseIf GadgetType(Gadget)= #PB_GadgetType_Image
ProcedureReturn GetGadgetState(Gadget)
ElseIf GadgetType(Gadget)= #PB_GadgetType_Canvas
ProcedureReturn GetGadgetAttribute(Gadget,#PB_Button_Image)
EndIf
EndProcedure
Procedure SetImageWhithMethod(Gadget,Image,Flag)
#PB_Image_Stretch=1<<0
#PB_Image_Center=1<<1
#PB_Image_Mosaic=1<<2
#PB_Image_Proportional=1<<3
If IsImage(Image)
If (Flag & #PB_Image_Stretch) = #PB_Image_Stretch
StretchImage(Gadget,@Image)
ElseIf (Flag & #PB_Image_Center) = #PB_Image_Center
CenterImage(Gadget,@Image)
ElseIf (Flag & #PB_Image_Mosaic) = #PB_Image_Mosaic
MosaicImage(Gadget,@Image)
ElseIf (Flag & #PB_Image_Proportional) = #PB_Image_Proportional
ProportionalImage(Gadget,@Image)
EndIf
If GadgetType(Gadget)= #PB_GadgetType_Canvas
Protected CanvasColor = GetSysColor_( #COLOR_BTNFACE )
If (ImageWidth(Image) >0 And ImageHeight(Image) >0) And StartDrawing(CanvasOutput(Gadget))
Box(0, 0, OutputWidth(),OutputHeight(), CanvasColor)
DrawAlphaImage(ImageID(Image),0,0)
StopDrawing()
EndIf
Else
SetImage(Gadget,Image)
EndIf
EndIf
EndProcedure
;----------------------------------------
Procedure ImageGadgetEx(Gadget,x,y,w,h,Image=-1,Flag=#False)
Protected.i GadgetID,NewFlag
#PB_Image_Single =1<<1
#PB_Image_Flat =1<<2
GadgetID=CanvasGadget(Gadget,x,y,w,h) :If Gadget=#PB_Any :Gadget=GadgetID :EndIf
;SetWindowTheme_(GadgetID(Gadget), @"", @"") ; отключаем тему
SetImageWhithMethod(Gadget,Image,Flag)
If Flag & #PB_Image_Border :NewFlag=13110 :EndIf
If Flag & #PB_Image_Single :NewFlag=131100 :EndIf
If Flag & #PB_Image_Raised :NewFlag=131101 :EndIf
If Flag & #PB_Image_Flat :NewFlag=1<<23 :EndIf
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
If Flag & #PB_Image_Flat
SetWindowLongPtr_(GadgetID(Gadget), #GWL_STYLE, GetWindowLong_(GadgetID(Gadget), #GWL_STYLE)|NewFlag)
EndIf
SetWindowLongPtr_(GadgetID(Gadget), #GWL_EXSTYLE, GetWindowLong_(GadgetID(Gadget), #GWL_EXSTYLE)|NewFlag)
SetWindowPos_(GadgetID(Gadget), 0, 0, 0, 0, 0, #SWP_FRAMECHANGED| #SWP_DRAWFRAME| #SWP_NOMOVE| #SWP_NOSIZE| #SWP_NOZORDER)
CompilerEndIf
ProcedureReturn GadgetID(Gadget)
EndProcedure
Enumeration #PB_Event_FirstCustomValue
#PB_EventType_Size
EndEnumeration
Procedure ResizeGadget2(Gadget,x,y,w,h)
ResizeGadget(Gadget,x,y,w,h)
PostEvent(#PB_Event_Gadget,EventWindow(),Gadget,#PB_EventType_Size)
EndProcedure
Macro ResizeGadget(Gadget,x,y,w,h)
ResizeGadget2(Gadget,x,y,w,h)
EndMacro
Procedure OpenWindow_0(x = 0, y = 0, width = 330, height = 150)
Window_0 = OpenWindow(#PB_Any, x, y, width, height, "Center", #PB_Window_SystemMenu| #PB_Window_SizeGadget)
ImageGadgetEx(0, 5, 5, 320, 140,-1,#PB_Image_Flat)
SetImageWhithMethod(0,png,#PB_Image_Center)
EndProcedure
Procedure OpenWindow_1(x = 0, y = 200, width = 330, height = 150)
Window_1 = OpenWindow(#PB_Any, x, y, width, height, "Stretch", #PB_Window_SystemMenu | #PB_Window_SizeGadget)
ImageGadgetEx(1, 5, 5, 320, 140,-1,#PB_Image_Single)
SetImageWhithMethod(1,png,#PB_Image_Stretch)
EndProcedure
Procedure OpenWindow_2(x = 0, y = 400, width = 330, height = 150)
Window_2 = OpenWindow(#PB_Any, x, y, width, height, "Mosaic", #PB_Window_SystemMenu | #PB_Window_SizeGadget)
ImageGadgetEx(2, 5, 5, 320, 140,-1,#PB_Image_Raised)
SetImageWhithMethod(2,png,#PB_Image_Mosaic)
EndProcedure
Procedure OpenWindow_3(x = 0, y = 0, width = 330, height = 150)
Window_3 = OpenWindow(#PB_Any, x, y, width, height, "Proportional", #PB_Window_SystemMenu | #PB_Window_SizeGadget|#PB_Window_ScreenCentered)
ImageGadgetEx(3, 5, 5, 320, 140,-1,#PB_Image_Border)
SetImageWhithMethod(3,png,#PB_Image_Proportional)
EndProcedure
OpenWindow_0()
OpenWindow_1()
OpenWindow_2()
OpenWindow_3()
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
If EventType()= #PB_EventType_Size
Debug EventGadget()
EndIf
Case #PB_Event_SizeWindow
CompilerIf #PB_Compiler_OS=#PB_OS_Windows
RedrawWindow_(WindowID(EventWindow()), 0, 0, #RDW_ALLCHILDREN|#RDW_UPDATENOW)
CompilerEndIf
SmartWindowRefresh(EventWindow(),#True)
If EventWindow()=Window_0
ResizeGadget(0,#PB_Ignore,#PB_Ignore,WindowWidth(Window_0)-10,WindowHeight(Window_0)-10)
SetImageWhithMethod(0,png,#PB_Image_Center)
EndIf
If EventWindow()=Window_1
ResizeGadget(1,#PB_Ignore,#PB_Ignore,WindowWidth(Window_1)-10,WindowHeight(Window_1)-10)
SetImageWhithMethod(1,png,#PB_Image_Stretch)
EndIf
If EventWindow()=Window_2
ResizeGadget(2,#PB_Ignore,#PB_Ignore,WindowWidth(Window_2)-10,WindowHeight(Window_2)-10)
SetImageWhithMethod(2,png,#PB_Image_Mosaic)
EndIf
If EventWindow()=Window_3
ResizeGadget(3,#PB_Ignore,#PB_Ignore,WindowWidth(Window_3)-10,WindowHeight(Window_3)-10)
SetImageWhithMethod(3,png,#PB_Image_Proportional)
EndIf
EndSelect
ForEver
DataSection
p:
Data.b $89,$50,$4E,$47,$0D,$0A,$1A,$0A,$00,$00,$00,$0D,$49,$48,$44,$52,$00,$00,$00,$10
Data.b $00,$00,$00,$10,$08,$06,$00,$00,$00,$1F,$F3,$FF,$61,$00,$00,$02,$0D,$49,$44,$41
Data.b $54,$38,$8D,$95,$91,$B1,$6B,$1A,$61,$18,$C6,$9F,$3B,$BE,$FB,$C0,$03,$6F,$38,$6F
Data.b $38,$24,$14,$CD,$62,$14,$37,$C5,$21,$04,$11,$AC,$01,$43,$71,$0B,$84,$4E,$21,$43
Data.b $C6,$CB,$2E,$08,$86,$24,$84,$E0,$94,$FF,$20,$90,$A4,$C3,$8D,$2E,$2E,$1D,$22,$17
Data.b $30,$7A,$82,$06,$6C,$3A,$18,$AB,$74,$C8,$2D,$D5,$A1,$43,$D0,$0F,$73,$5F,$97,$1A
Data.b $0A,$D5,$36,$FE,$B6,$F7,$E5,$79,$7E,$C3,$FB,$0A,$98,$43,$2E,$97,$D3,$44,$51,$7C
Data.b $0F,$40,$01,$F0,$D3,$75,$DD,$CF,$E5,$72,$F9,$C7,$BC,$EC,$5C,$62,$B1,$D8,$8E,$65
Data.b $59,$F6,$70,$38,$E4,$96,$65,$D9,$B1,$58,$6C,$E7,$CD,$65,$00,$50,$55,$75,$DF,$71
Data.b $1C,$4E,$29,$CD,$3B,$8E,$C3,$55,$55,$DD,$5F,$4A,$00,$60,$CB,$34,$4D,$BB,$DF,$FF
Data.b $C6,$4D,$D3,$B4,$01,$6C,$2D,$2B,$F8,$00,$C0,$78,$78,$F8,$C2,$01,$18,$BF,$E7,$B9
Data.b $88,$0B,$F6,$91,$5E,$EF,$F1,$7C,$34,$1A,$A1,$D7,$7B,$3C,$07,$10,$59,$4A,$40,$08
Data.b $79,$0A,$85,$D6,$0A,$00,$10,$0A,$AD,$15,$08,$21,$4F,$8B,$04,$24,$1A,$8D,$7E,$14
Data.b $04,$E1,$DD,$6C,$C1,$39,$FF,$DE,$E9,$74,$AE,$08,$21,$79,$C6,$18,$00,$B8,$D3,$E9
Data.b $F4,$6A,$41,$EE,$13,$61,$8C,$AD,$36,$1A,$8D,$A3,$66,$B3,$39,$08,$06,$83,$81,$6C
Data.b $36,$5B,$00,$00,$D7,$75,$9F,$5F,$5E,$5C,$B8,$AE,$FB,$0C,$00,$8C,$B1,$D5,$4A,$A5
Data.b $72,$D4,$EF,$F7,$07,$F1,$78,$3C,$90,$48,$24,$0A,$00,$20,$4E,$26,$13,$B1,$5A,$AD
Data.b $0E,$74,$5D,$0F,$18,$C6,$C1,$C5,$78,$3C,$6E,$CF,$04,$80,$F8,$2A,$18,$8F,$C7,$6D
Data.b $C3,$38,$B8,$D0,$75,$3D,$50,$AD,$56,$07,$93,$C9,$44,$04,$00,$91,$31,$26,$F9,$FD
Data.b $2B,$81,$4C,$26,$73,$5C,$2C,$1E,$EE,$86,$C3,$91,$6D,$5D,$D7,$D7,$05,$41,$20,$A2
Data.b $28,$41,$10,$04,$A2,$EB,$FA,$7A,$38,$1C,$D9,$2E,$16,$0F,$77,$33,$99,$CC,$B1,$DF
Data.b $BF,$12,$60,$8C,$49,$00,$00,$4D,$D3,$F6,$7C,$3E,$DF,$89,$A6,$69,$39,$9F,$CF,$77
Data.b $52,$AB,$D9,$3C,$9D,$DE,$BC,$A4,$94,$E6,$6F,$6E,$EA,$9C,$52,$9A,$4F,$A7,$37,$2F
Data.b $6B,$35,$9B,$FF,$99,$D3,$34,$6D,$EF,$AF,$8B,$2A,$8A,$B2,$E1,$F5,$7A,$4F,$EB,$F5
Data.b $7B,$9E,$4A,$A5,$AF,$6F,$6F,$DB,$3C,$95,$4A,$5F,$D7,$EB,$F7,$DC,$EB,$F5,$9E,$2A
Data.b $8A,$B2,$B1,$E8,$1B,$AF,$C8,$B2,$9C,$F4,$78,$3C,$67,$AD,$56,$97,$DF,$DD,$7D,$E5
Data.b $AD,$56,$97,$7B,$3C,$9E,$33,$59,$96,$93,$FF,$2D,$CF,$A0,$94,$26,$25,$49,$2A,$D9
Data.b $76,$97,$4B,$92,$54,$A2,$94,$BE,$BD,$3C,$83,$10,$92,$24,$84,$94,$08,$21,$FF,$2C
Data.b $FF,$02,$6A,$A2,$D8,$0A,$79,$12,$C2,$C4,$00,$00,$00,$00,$49,$45,$4E,$44,$AE,$42
Data.b $60,$82
pend:
EndDataSection
DataSection
i:
Data.b $00,$00,$01,$00,$01,$00,$10,$10,$00,$00,$01,$00,$20,$00,$68,$04,$00,$00,$16,$00
Data.b $00,$00,$28,$00,$00,$00,$10,$00,$00,$00,$20,$00,$00,$00,$01,$00,$20,$00,$00,$00
Data.b $00,$00,$00,$04,$00,$00,$12,$0B,$00,$00,$12,$0B,$00,$00,$00,$00,$00,$00,$00,$00
Data.b $00,$00,$13,$13,$13,$00,$11,$11,$11,$00,$13,$13,$13,$00,$0D,$0D,$0D,$00,$09,$09
Data.b $09,$00,$05,$05,$05,$00,$04,$04,$04,$3F,$04,$04,$04,$8A,$04,$04,$04,$3F,$05,$05
Data.b $05,$00,$09,$09,$09,$00,$0D,$0D,$0D,$00,$13,$13,$13,$00,$11,$11,$11,$00,$13,$13
Data.b $13,$00,$FF,$FF,$FF,$00,$13,$13,$13,$00,$11,$11,$11,$00,$13,$13,$13,$00,$0D,$0D
Data.b $0D,$00,$09,$09,$09,$00,$06,$06,$06,$3F,$05,$05,$05,$8A,$DB,$CB,$CB,$FF,$05,$05
Data.b $05,$8A,$06,$06,$06,$3F,$09,$09,$09,$00,$0D,$0D,$0D,$00,$13,$13,$13,$00,$11,$11
Data.b $11,$00,$13,$13,$13,$00,$FF,$FF,$FF,$00,$13,$13,$13,$00,$11,$11,$11,$00,$13,$13
Data.b $13,$00,$0D,$0D,$0D,$00,$0A,$0A,$0A,$3E,$09,$09,$09,$89,$DB,$CF,$CF,$FF,$D7,$C8
Data.b $C8,$FF,$DB,$CF,$CF,$FF,$09,$09,$09,$89,$0A,$0A,$0A,$3E,$0D,$0D,$0D,$00,$13,$13
Data.b $13,$00,$11,$11,$11,$00,$13,$13,$13,$00,$FF,$FF,$FF,$00,$13,$13,$13,$00,$11,$11
Data.b $11,$00,$13,$13,$13,$00,$0E,$0E,$0E,$3D,$0D,$0D,$0D,$87,$D1,$C9,$C9,$FF,$43,$40
Data.b $40,$A5,$D0,$C4,$C4,$FF,$43,$40,$40,$A5,$D1,$C9,$C9,$FF,$0D,$0D,$0D,$87,$0E,$0E
Data.b $0E,$3D,$13,$13,$13,$00,$11,$11,$11,$00,$13,$13,$13,$00,$FF,$FF,$FF,$00,$14,$14
Data.b $14,$63,$13,$13,$13,$84,$14,$14,$14,$4F,$13,$13,$13,$84,$CB,$C7,$C7,$FF,$46,$43
Data.b $43,$A3,$06,$06,$06,$7B,$C9,$C0,$C0,$FF,$06,$06,$06,$7B,$46,$43,$43,$A3,$CB,$C7
Data.b $C7,$FF,$13,$13,$13,$84,$14,$14,$14,$4F,$13,$13,$13,$84,$14,$14,$14,$63,$FF,$FF
Data.b $FF,$00,$19,$19,$19,$82,$CD,$CB,$CB,$FF,$19,$19,$19,$82,$CD,$CB,$CB,$FF,$48,$47
Data.b $47,$A1,$18,$18,$18,$3B,$01,$01,$01,$6B,$C2,$BD,$BD,$FF,$01,$01,$01,$6B,$18,$18
Data.b $18,$3B,$48,$47,$47,$A1,$CD,$CB,$CB,$FF,$19,$19,$19,$82,$CD,$CB,$CB,$FF,$19,$19
Data.b $19,$82,$FF,$FF,$FF,$00,$1F,$1F,$1F,$7F,$B1,$B1,$B1,$DF,$D4,$D4,$D4,$FF,$4C,$4B
Data.b $4B,$9F,$1E,$1E,$1E,$4C,$0D,$0D,$0D,$00,$00,$00,$00,$67,$BD,$BB,$BB,$FF,$00,$00
Data.b $00,$67,$0D,$0D,$0D,$00,$1E,$1E,$1E,$4C,$4C,$4B,$4B,$9F,$D4,$D4,$D4,$FF,$B1,$B1
Data.b $B1,$DF,$1F,$1F,$1F,$7F,$FF,$FF,$FF,$00,$26,$26,$26,$7C,$F0,$F0,$F0,$FF,$BC,$BC
Data.b $BC,$DF,$DD,$DD,$DD,$FF,$26,$26,$26,$7C,$14,$14,$14,$00,$02,$02,$02,$70,$BB,$BB
Data.b $BB,$FF,$02,$02,$02,$70,$14,$14,$14,$00,$26,$26,$26,$7C,$DD,$DD,$DD,$FF,$BC,$BC
Data.b $BC,$DF,$F0,$F0,$F0,$FF,$26,$26,$26,$7C,$FF,$FF,$FF,$00,$2C,$2C,$2C,$5B,$2D,$2D
Data.b $2D,$78,$2D,$2D,$2D,$78,$2D,$2D,$2D,$78,$2C,$2C,$2C,$5B,$18,$18,$18,$00,$04,$04
Data.b $04,$7A,$BD,$BE,$BE,$FF,$04,$04,$04,$7A,$18,$18,$18,$00,$2C,$2C,$2C,$5B,$2D,$2D
Data.b $2D,$78,$2D,$2D,$2D,$78,$2D,$2D,$2D,$78,$2C,$2C,$2C,$5B,$FF,$FF,$FF,$00,$2D,$2D
Data.b $2D,$00,$2E,$2E,$2E,$00,$2E,$2E,$2E,$00,$2E,$2E,$2E,$00,$23,$23,$23,$00,$04,$04
Data.b $04,$5D,$04,$04,$04,$7C,$C3,$C4,$C4,$FF,$04,$04,$04,$7C,$04,$04,$04,$5D,$23,$23
Data.b $23,$00,$2E,$2E,$2E,$00,$2E,$2E,$2E,$00,$2E,$2E,$2E,$00,$2D,$2D,$2D,$00,$FF,$FF
Data.b $FF,$00,$2D,$2D,$2D,$00,$2E,$2E,$2E,$00,$2E,$2E,$2E,$00,$23,$23,$23,$00,$00,$00
Data.b $00,$00,$00,$00,$00,$77,$DC,$DD,$DD,$FF,$C3,$C4,$C4,$FF,$DC,$DD,$DD,$FF,$00,$00
Data.b $00,$77,$00,$00,$00,$00,$23,$23,$23,$00,$2E,$2E,$2E,$00,$2E,$2E,$2E,$00,$2D,$2D
Data.b $2D,$00,$FF,$FF,$FF,$00,$2D,$2D,$2D,$00,$2E,$2E,$2E,$00,$2E,$2E,$2E,$00,$00,$00
Data.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$4D,$00,$00,$00,$6E,$D5,$D6,$D6,$FF,$00,$00
Data.b $00,$6E,$00,$00,$00,$4D,$00,$00,$00,$00,$00,$00,$00,$00,$2E,$2E,$2E,$00,$2E,$2E
Data.b $2E,$00,$2D,$2D,$2D,$00,$FF,$FF,$FF,$00,$2D,$2D,$2D,$00,$23,$23,$23,$00,$0C,$0C
Data.b $0C,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$4B,$AA,$AA,$AA,$CB,$DE,$DF
Data.b $DF,$FF,$AA,$AA,$AA,$CB,$00,$00,$00,$4B,$00,$00,$00,$00,$00,$00,$00,$00,$0C,$0C
Data.b $0C,$00,$23,$23,$23,$00,$2D,$2D,$2D,$00,$FF,$FF,$FF,$00,$23,$23,$23,$00,$12,$12
Data.b $12,$00,$12,$12,$12,$00,$12,$12,$12,$00,$12,$12,$12,$00,$12,$12,$12,$66,$E7,$E7
Data.b $E7,$FF,$06,$06,$06,$7A,$E7,$E7,$E7,$FF,$12,$12,$12,$66,$12,$12,$12,$00,$12,$12
Data.b $12,$00,$12,$12,$12,$00,$12,$12,$12,$00,$23,$23,$23,$00,$FF,$FF,$FF,$00,$33,$33
Data.b $33,$00,$33,$33,$33,$00,$33,$33,$33,$00,$33,$33,$33,$00,$33,$33,$33,$00,$33,$33
Data.b $33,$59,$C3,$C3,$C3,$CA,$ED,$ED,$ED,$FF,$C3,$C3,$C3,$CA,$33,$33,$33,$59,$33,$33
Data.b $33,$00,$33,$33,$33,$00,$33,$33,$33,$00,$33,$33,$33,$00,$33,$33,$33,$00,$FF,$FF
Data.b $FF,$00,$4B,$4B,$4B,$00,$4B,$4B,$4B,$00,$4B,$4B,$4B,$00,$4B,$4B,$4B,$00,$4B,$4B
Data.b $4B,$00,$4E,$4E,$4E,$14,$50,$50,$50,$59,$50,$50,$50,$66,$50,$50,$50,$59,$4E,$4E
Data.b $4E,$14,$4B,$4B,$4B,$00,$4B,$4B,$4B,$00,$4B,$4B,$4B,$00,$4B,$4B,$4B,$00,$4B,$4B
Data.b $4B,$00,$FF,$FF,$FF,$00,$FC,$7F,$00,$00,$F8,$3F,$00,$00,$F0,$1F,$00,$00,$E0,$0F
Data.b $00,$00,$00,$01,$00,$00,$00,$01,$00,$00,$04,$41,$00,$00,$04,$41,$00,$00,$04,$41
Data.b $00,$00,$F8,$3F,$00,$00,$F8,$3F,$00,$00,$F8,$3F,$00,$00,$F8,$3F,$00,$00,$F8,$3F
Data.b $00,$00,$F8,$3F,$00,$00,$F8,$3F,$00,$00
iend:
EndDataSection
Code: Select all
;- // EXAMPLE
UseJPEGImageDecoder()
UsePNGImageDecoder()
Global ico = CatchImage(#PB_Any, ?i, 1150)
Global png = CatchImage(#PB_Any, ?p, 582)
;-// FUNCTIONS
Procedure MB_CenterPos(ContainerWidth, ObjectWidth)
ProcedureReturn (ContainerWidth - ObjectWidth ) / 2
EndProcedure
#MB_RESIZEIMAGE_FILL = 0
#MB_RESIZEIMAGE_FIT = 1
#MB_RESIZEIMAGE_STRETCH = 2
#MB_RESIZEIMAGE_TILE = 3
#MB_RESIZEIMAGE_CENTER = 4
Structure MB_ResizeImageSTR
Image.i
Width.i
Height.i
Mode.i
Color.i
Result.i
EndStructure
Procedure MB_ResizeImageThread(*MB_ResizeImageVar.MB_ResizeImageSTR)
Protected Image, Width, Height, Mode, Color
Protected ImageW, ImageH, WidthP.f , HeightP.f , WidthR, HeightR, GetP.f
Debug 555555
Image = *MB_ResizeImageVar\Image
Width = *MB_ResizeImageVar\Width
Height = *MB_ResizeImageVar\Height
Mode = *MB_ResizeImageVar\Mode
Color = *MB_ResizeImageVar\Color
If IsImage(Image)
ImageW = ImageWidth(Image)
ImageH = ImageHeight(Image)
WidthP = ImageW / Width
HeightP = ImageH / Height
WidthR = Width
HeightR = Height
Select Mode
Case #MB_RESIZEIMAGE_FILL
WidthR = Width
HeightR = ImageH / WidthP
If HeightR < Height
HeightR = Height
WidthR = ImageW / HeightP
EndIf
Case #MB_RESIZEIMAGE_FIT
WidthR = Width
HeightR = ImageH / WidthP
Case #MB_RESIZEIMAGE_STRETCH
WidthR = Width
HeightR = Height
Case #MB_RESIZEIMAGE_TILE
WidthR = ImageW
HeightR = ImageH
Case #MB_RESIZEIMAGE_CENTER
WidthR = ImageW
HeightR = ImageH
EndSelect
If Width = 0
Width = WidthR
EndIf
If Height = 0
Height = HeightR
EndIf
ResizeImage(Image,WidthR,HeightR)
NewImage = CreateImage(#PB_Any,Width,Height,32,Color);,#PB_Image_Transparent)
StartDrawing(ImageOutput(NewImage))
;DrawingMode(#PB_2DDrawing_AlphaChannel|#PB_2DDrawing_AllChannels)
Box(0,0,Width,Height,Color)
If Mode = #MB_RESIZEIMAGE_FIT
DrawAlphaImage(ImageID(Image),0,0)
ElseIf Mode = #MB_RESIZEIMAGE_CENTER
DrawAlphaImage(ImageID(Image),MB_CenterPos(Width,WidthR),MB_CenterPos(Height,HeightR));,125)
ElseIf Mode = #MB_RESIZEIMAGE_TILE
For x = 0 To Round( Width / WidthR , #PB_Round_Down)
For y = 0 To Round( Height / HeightR , #PB_Round_Down)
DrawAlphaImage(ImageID(Image),x * WidthR,y * HeightR)
Next
Next
Else
DrawAlphaImage(ImageID(Image),0,0)
EndIf
StopDrawing()
If IsImage(Image)
FreeImage(Image)
EndIf
EndIf
*MB_ResizeImageVar\Result = NewImage
ProcedureReturn 1
EndProcedure
Procedure MB_ResizeImage(Image,Width=0,Height=0,Mode=#MB_RESIZEIMAGE_FILL,Color=#PB_Image_Transparent)
Protected Thread, Result
Protected *MB_ResizeImageVar.MB_ResizeImageSTR
*MB_ResizeImageVar.MB_ResizeImageSTR = AllocateMemory(SizeOf(MB_ResizeImageSTR))
*MB_ResizeImageVar\Image = Image
*MB_ResizeImageVar\Width = Width
*MB_ResizeImageVar\Height = Height
*MB_ResizeImageVar\Mode = Mode
*MB_ResizeImageVar\Color = Color
Thread = CreateThread(@MB_ResizeImageThread(),*MB_ResizeImageVar)
WaitThread(Thread)
Result = *MB_ResizeImageVar\Result
FreeMemory(*MB_ResizeImageVar)
ProcedureReturn Result
EndProcedure
If OpenWindow(0,0,0,320,240,"",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
;file$=OpenFileRequester("","*.*","*.*",0)
pic=png;LoadImage(#PB_Any,file$)
fixpic=MB_ResizeImage(pic,320,240,#MB_RESIZEIMAGE_TILE);,#Red)
ImageGadget(0,0,0,320,0,ImageID(fixpic))
Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow
EndIf
DataSection
p:
Data.b $89,$50,$4E,$47,$0D,$0A,$1A,$0A,$00,$00,$00,$0D,$49,$48,$44,$52,$00,$00,$00,$10
Data.b $00,$00,$00,$10,$08,$06,$00,$00,$00,$1F,$F3,$FF,$61,$00,$00,$02,$0D,$49,$44,$41
Data.b $54,$38,$8D,$95,$91,$B1,$6B,$1A,$61,$18,$C6,$9F,$3B,$BE,$FB,$C0,$03,$6F,$38,$6F
Data.b $38,$24,$14,$CD,$62,$14,$37,$C5,$21,$04,$11,$AC,$01,$43,$71,$0B,$84,$4E,$21,$43
Data.b $C6,$CB,$2E,$08,$86,$24,$84,$E0,$94,$FF,$20,$90,$A4,$C3,$8D,$2E,$2E,$1D,$22,$17
Data.b $30,$7A,$82,$06,$6C,$3A,$18,$AB,$74,$C8,$2D,$D5,$A1,$43,$D0,$0F,$73,$5F,$97,$1A
Data.b $0A,$D5,$36,$FE,$B6,$F7,$E5,$79,$7E,$C3,$FB,$0A,$98,$43,$2E,$97,$D3,$44,$51,$7C
Data.b $0F,$40,$01,$F0,$D3,$75,$DD,$CF,$E5,$72,$F9,$C7,$BC,$EC,$5C,$62,$B1,$D8,$8E,$65
Data.b $59,$F6,$70,$38,$E4,$96,$65,$D9,$B1,$58,$6C,$E7,$CD,$65,$00,$50,$55,$75,$DF,$71
Data.b $1C,$4E,$29,$CD,$3B,$8E,$C3,$55,$55,$DD,$5F,$4A,$00,$60,$CB,$34,$4D,$BB,$DF,$FF
Data.b $C6,$4D,$D3,$B4,$01,$6C,$2D,$2B,$F8,$00,$C0,$78,$78,$F8,$C2,$01,$18,$BF,$E7,$B9
Data.b $88,$0B,$F6,$91,$5E,$EF,$F1,$7C,$34,$1A,$A1,$D7,$7B,$3C,$07,$10,$59,$4A,$40,$08
Data.b $79,$0A,$85,$D6,$0A,$00,$10,$0A,$AD,$15,$08,$21,$4F,$8B,$04,$24,$1A,$8D,$7E,$14
Data.b $04,$E1,$DD,$6C,$C1,$39,$FF,$DE,$E9,$74,$AE,$08,$21,$79,$C6,$18,$00,$B8,$D3,$E9
Data.b $F4,$6A,$41,$EE,$13,$61,$8C,$AD,$36,$1A,$8D,$A3,$66,$B3,$39,$08,$06,$83,$81,$6C
Data.b $36,$5B,$00,$00,$D7,$75,$9F,$5F,$5E,$5C,$B8,$AE,$FB,$0C,$00,$8C,$B1,$D5,$4A,$A5
Data.b $72,$D4,$EF,$F7,$07,$F1,$78,$3C,$90,$48,$24,$0A,$00,$20,$4E,$26,$13,$B1,$5A,$AD
Data.b $0E,$74,$5D,$0F,$18,$C6,$C1,$C5,$78,$3C,$6E,$CF,$04,$80,$F8,$2A,$18,$8F,$C7,$6D
Data.b $C3,$38,$B8,$D0,$75,$3D,$50,$AD,$56,$07,$93,$C9,$44,$04,$00,$91,$31,$26,$F9,$FD
Data.b $2B,$81,$4C,$26,$73,$5C,$2C,$1E,$EE,$86,$C3,$91,$6D,$5D,$D7,$D7,$05,$41,$20,$A2
Data.b $28,$41,$10,$04,$A2,$EB,$FA,$7A,$38,$1C,$D9,$2E,$16,$0F,$77,$33,$99,$CC,$B1,$DF
Data.b $BF,$12,$60,$8C,$49,$00,$00,$4D,$D3,$F6,$7C,$3E,$DF,$89,$A6,$69,$39,$9F,$CF,$77
Data.b $52,$AB,$D9,$3C,$9D,$DE,$BC,$A4,$94,$E6,$6F,$6E,$EA,$9C,$52,$9A,$4F,$A7,$37,$2F
Data.b $6B,$35,$9B,$FF,$99,$D3,$34,$6D,$EF,$AF,$8B,$2A,$8A,$B2,$E1,$F5,$7A,$4F,$EB,$F5
Data.b $7B,$9E,$4A,$A5,$AF,$6F,$6F,$DB,$3C,$95,$4A,$5F,$D7,$EB,$F7,$DC,$EB,$F5,$9E,$2A
Data.b $8A,$B2,$B1,$E8,$1B,$AF,$C8,$B2,$9C,$F4,$78,$3C,$67,$AD,$56,$97,$DF,$DD,$7D,$E5
Data.b $AD,$56,$97,$7B,$3C,$9E,$33,$59,$96,$93,$FF,$2D,$CF,$A0,$94,$26,$25,$49,$2A,$D9
Data.b $76,$97,$4B,$92,$54,$A2,$94,$BE,$BD,$3C,$83,$10,$92,$24,$84,$94,$08,$21,$FF,$2C
Data.b $FF,$02,$6A,$A2,$D8,$0A,$79,$12,$C2,$C4,$00,$00,$00,$00,$49,$45,$4E,$44,$AE,$42
Data.b $60,$82
pend:
EndDataSection
DataSection
i:
Data.b $00,$00,$01,$00,$01,$00,$10,$10,$00,$00,$01,$00,$20,$00,$68,$04,$00,$00,$16,$00
Data.b $00,$00,$28,$00,$00,$00,$10,$00,$00,$00,$20,$00,$00,$00,$01,$00,$20,$00,$00,$00
Data.b $00,$00,$00,$04,$00,$00,$12,$0B,$00,$00,$12,$0B,$00,$00,$00,$00,$00,$00,$00,$00
Data.b $00,$00,$13,$13,$13,$00,$11,$11,$11,$00,$13,$13,$13,$00,$0D,$0D,$0D,$00,$09,$09
Data.b $09,$00,$05,$05,$05,$00,$04,$04,$04,$3F,$04,$04,$04,$8A,$04,$04,$04,$3F,$05,$05
Data.b $05,$00,$09,$09,$09,$00,$0D,$0D,$0D,$00,$13,$13,$13,$00,$11,$11,$11,$00,$13,$13
Data.b $13,$00,$FF,$FF,$FF,$00,$13,$13,$13,$00,$11,$11,$11,$00,$13,$13,$13,$00,$0D,$0D
Data.b $0D,$00,$09,$09,$09,$00,$06,$06,$06,$3F,$05,$05,$05,$8A,$DB,$CB,$CB,$FF,$05,$05
Data.b $05,$8A,$06,$06,$06,$3F,$09,$09,$09,$00,$0D,$0D,$0D,$00,$13,$13,$13,$00,$11,$11
Data.b $11,$00,$13,$13,$13,$00,$FF,$FF,$FF,$00,$13,$13,$13,$00,$11,$11,$11,$00,$13,$13
Data.b $13,$00,$0D,$0D,$0D,$00,$0A,$0A,$0A,$3E,$09,$09,$09,$89,$DB,$CF,$CF,$FF,$D7,$C8
Data.b $C8,$FF,$DB,$CF,$CF,$FF,$09,$09,$09,$89,$0A,$0A,$0A,$3E,$0D,$0D,$0D,$00,$13,$13
Data.b $13,$00,$11,$11,$11,$00,$13,$13,$13,$00,$FF,$FF,$FF,$00,$13,$13,$13,$00,$11,$11
Data.b $11,$00,$13,$13,$13,$00,$0E,$0E,$0E,$3D,$0D,$0D,$0D,$87,$D1,$C9,$C9,$FF,$43,$40
Data.b $40,$A5,$D0,$C4,$C4,$FF,$43,$40,$40,$A5,$D1,$C9,$C9,$FF,$0D,$0D,$0D,$87,$0E,$0E
Data.b $0E,$3D,$13,$13,$13,$00,$11,$11,$11,$00,$13,$13,$13,$00,$FF,$FF,$FF,$00,$14,$14
Data.b $14,$63,$13,$13,$13,$84,$14,$14,$14,$4F,$13,$13,$13,$84,$CB,$C7,$C7,$FF,$46,$43
Data.b $43,$A3,$06,$06,$06,$7B,$C9,$C0,$C0,$FF,$06,$06,$06,$7B,$46,$43,$43,$A3,$CB,$C7
Data.b $C7,$FF,$13,$13,$13,$84,$14,$14,$14,$4F,$13,$13,$13,$84,$14,$14,$14,$63,$FF,$FF
Data.b $FF,$00,$19,$19,$19,$82,$CD,$CB,$CB,$FF,$19,$19,$19,$82,$CD,$CB,$CB,$FF,$48,$47
Data.b $47,$A1,$18,$18,$18,$3B,$01,$01,$01,$6B,$C2,$BD,$BD,$FF,$01,$01,$01,$6B,$18,$18
Data.b $18,$3B,$48,$47,$47,$A1,$CD,$CB,$CB,$FF,$19,$19,$19,$82,$CD,$CB,$CB,$FF,$19,$19
Data.b $19,$82,$FF,$FF,$FF,$00,$1F,$1F,$1F,$7F,$B1,$B1,$B1,$DF,$D4,$D4,$D4,$FF,$4C,$4B
Data.b $4B,$9F,$1E,$1E,$1E,$4C,$0D,$0D,$0D,$00,$00,$00,$00,$67,$BD,$BB,$BB,$FF,$00,$00
Data.b $00,$67,$0D,$0D,$0D,$00,$1E,$1E,$1E,$4C,$4C,$4B,$4B,$9F,$D4,$D4,$D4,$FF,$B1,$B1
Data.b $B1,$DF,$1F,$1F,$1F,$7F,$FF,$FF,$FF,$00,$26,$26,$26,$7C,$F0,$F0,$F0,$FF,$BC,$BC
Data.b $BC,$DF,$DD,$DD,$DD,$FF,$26,$26,$26,$7C,$14,$14,$14,$00,$02,$02,$02,$70,$BB,$BB
Data.b $BB,$FF,$02,$02,$02,$70,$14,$14,$14,$00,$26,$26,$26,$7C,$DD,$DD,$DD,$FF,$BC,$BC
Data.b $BC,$DF,$F0,$F0,$F0,$FF,$26,$26,$26,$7C,$FF,$FF,$FF,$00,$2C,$2C,$2C,$5B,$2D,$2D
Data.b $2D,$78,$2D,$2D,$2D,$78,$2D,$2D,$2D,$78,$2C,$2C,$2C,$5B,$18,$18,$18,$00,$04,$04
Data.b $04,$7A,$BD,$BE,$BE,$FF,$04,$04,$04,$7A,$18,$18,$18,$00,$2C,$2C,$2C,$5B,$2D,$2D
Data.b $2D,$78,$2D,$2D,$2D,$78,$2D,$2D,$2D,$78,$2C,$2C,$2C,$5B,$FF,$FF,$FF,$00,$2D,$2D
Data.b $2D,$00,$2E,$2E,$2E,$00,$2E,$2E,$2E,$00,$2E,$2E,$2E,$00,$23,$23,$23,$00,$04,$04
Data.b $04,$5D,$04,$04,$04,$7C,$C3,$C4,$C4,$FF,$04,$04,$04,$7C,$04,$04,$04,$5D,$23,$23
Data.b $23,$00,$2E,$2E,$2E,$00,$2E,$2E,$2E,$00,$2E,$2E,$2E,$00,$2D,$2D,$2D,$00,$FF,$FF
Data.b $FF,$00,$2D,$2D,$2D,$00,$2E,$2E,$2E,$00,$2E,$2E,$2E,$00,$23,$23,$23,$00,$00,$00
Data.b $00,$00,$00,$00,$00,$77,$DC,$DD,$DD,$FF,$C3,$C4,$C4,$FF,$DC,$DD,$DD,$FF,$00,$00
Data.b $00,$77,$00,$00,$00,$00,$23,$23,$23,$00,$2E,$2E,$2E,$00,$2E,$2E,$2E,$00,$2D,$2D
Data.b $2D,$00,$FF,$FF,$FF,$00,$2D,$2D,$2D,$00,$2E,$2E,$2E,$00,$2E,$2E,$2E,$00,$00,$00
Data.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$4D,$00,$00,$00,$6E,$D5,$D6,$D6,$FF,$00,$00
Data.b $00,$6E,$00,$00,$00,$4D,$00,$00,$00,$00,$00,$00,$00,$00,$2E,$2E,$2E,$00,$2E,$2E
Data.b $2E,$00,$2D,$2D,$2D,$00,$FF,$FF,$FF,$00,$2D,$2D,$2D,$00,$23,$23,$23,$00,$0C,$0C
Data.b $0C,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$4B,$AA,$AA,$AA,$CB,$DE,$DF
Data.b $DF,$FF,$AA,$AA,$AA,$CB,$00,$00,$00,$4B,$00,$00,$00,$00,$00,$00,$00,$00,$0C,$0C
Data.b $0C,$00,$23,$23,$23,$00,$2D,$2D,$2D,$00,$FF,$FF,$FF,$00,$23,$23,$23,$00,$12,$12
Data.b $12,$00,$12,$12,$12,$00,$12,$12,$12,$00,$12,$12,$12,$00,$12,$12,$12,$66,$E7,$E7
Data.b $E7,$FF,$06,$06,$06,$7A,$E7,$E7,$E7,$FF,$12,$12,$12,$66,$12,$12,$12,$00,$12,$12
Data.b $12,$00,$12,$12,$12,$00,$12,$12,$12,$00,$23,$23,$23,$00,$FF,$FF,$FF,$00,$33,$33
Data.b $33,$00,$33,$33,$33,$00,$33,$33,$33,$00,$33,$33,$33,$00,$33,$33,$33,$00,$33,$33
Data.b $33,$59,$C3,$C3,$C3,$CA,$ED,$ED,$ED,$FF,$C3,$C3,$C3,$CA,$33,$33,$33,$59,$33,$33
Data.b $33,$00,$33,$33,$33,$00,$33,$33,$33,$00,$33,$33,$33,$00,$33,$33,$33,$00,$FF,$FF
Data.b $FF,$00,$4B,$4B,$4B,$00,$4B,$4B,$4B,$00,$4B,$4B,$4B,$00,$4B,$4B,$4B,$00,$4B,$4B
Data.b $4B,$00,$4E,$4E,$4E,$14,$50,$50,$50,$59,$50,$50,$50,$66,$50,$50,$50,$59,$4E,$4E
Data.b $4E,$14,$4B,$4B,$4B,$00,$4B,$4B,$4B,$00,$4B,$4B,$4B,$00,$4B,$4B,$4B,$00,$4B,$4B
Data.b $4B,$00,$FF,$FF,$FF,$00,$FC,$7F,$00,$00,$F8,$3F,$00,$00,$F0,$1F,$00,$00,$E0,$0F
Data.b $00,$00,$00,$01,$00,$00,$00,$01,$00,$00,$04,$41,$00,$00,$04,$41,$00,$00,$04,$41
Data.b $00,$00,$F8,$3F,$00,$00,$F8,$3F,$00,$00,$F8,$3F,$00,$00,$F8,$3F,$00,$00,$F8,$3F
Data.b $00,$00,$F8,$3F,$00,$00,$F8,$3F,$00,$00
iend:
EndDataSection