il faut conserver l'image originale pour recalculer le zoom et éviter la dégradation.
Code : Tout sélectionner
;####################################################################
;### image Zoom scroll canvas deplacement de l'image ###
;### avec la mouse et gestion zoom de l'alpha ###
;### par kernadec jullet 2011 Ver: PB 4.60 b3 ###
;####################################################################
Enumeration
#Window
#Image0
#Image1
#Scroll
#canvas
EndEnumeration
win_w=600
win_h=600
image_w.l=800
image_h.l=800
ExamineDesktops()
CreateImage(#Image0,image_w+DesktopWidth(0),image_h+DesktopHeight(0))
CreateImage(#Image1,image_w+DesktopWidth(0),image_h+DesktopHeight(0))
LoadImage(#Image0, "c:\purebasic\examples\sources\data\Geebee2.bmp")
ResizeImage(#Image0,image_w,image_h,#PB_Image_Smooth)
CopyImage(#Image0,#Image1) ; crée une copie de l'image pour eviter la degradation de resize
OpenWindow(#Window,0, 0,win_w,win_h, "Zoom Canvas ScrollArea clic deplace Kernadec", #WS_SYSMENU | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget)
ScrollAreaGadget(#Scroll, 0, 0,WindowWidth(#Window),WindowHeight(#Window),ImageWidth(#Image0),ImageHeight(#Image0),30)
SetWindowColor(#Window,#White)
CanvasGadget(#canvas, 0, 0,ImageWidth(#Image0),ImageHeight(#Image0),#PB_Canvas_DrawFocus|#PB_Canvas_Keyboard)
SetGadgetAttribute(#Scroll,#PB_ScrollArea_X,(ImageWidth(#Image0)-WindowWidth(#Window))/2)
SetGadgetAttribute(#Scroll,#PB_ScrollArea_Y,(ImageHeight(#Image0)-WindowHeight(#Window))/2)
bm=#False
Repeat
Event= WaitWindowEvent()
SetActiveGadget(#canvas) ; focus Canvas : MouseWheel
Select EventType()
Case #PB_EventType_MouseWheel
delta=delta+(GetGadgetAttribute(#canvas,#PB_Canvas_WheelDelta )*10) ; delta*10
CopyImage(#Image1,#Image0) ; restore l'image originale
ResizeImage(#Image0,(ImageWidth(#Image0)-delta),(ImageHeight(#Image0)-delta),#PB_Image_Smooth)
StartDrawing(CanvasOutput(#canvas))
Box(-20,-20,WindowWidth(#Window)*2,WindowHeight(#Window)*2,RGB(255,255,255))
DrawAlphaImage(ImageID(#Image0),PosXm1+(delta/2),PosYm1+(delta/2),255)
StopDrawing()
Case #PB_EventType_RightButtonDown ; choix du bouton deplacer
bm=#True
PosXm = GetGadgetAttribute(#canvas,#PB_Canvas_MouseX)-PosXm1
PosYm = GetGadgetAttribute(#canvas,#PB_Canvas_MouseY)-PosYm1
Case #PB_EventType_LeftButtonDown ; choix du bouton deplacer
bm=#True
PosXm = GetGadgetAttribute(#canvas,#PB_Canvas_MouseX)-PosXm1
PosYm = GetGadgetAttribute(#canvas,#PB_Canvas_MouseY)-PosYm1
Case #PB_EventType_MouseMove ; deplacement
If bm=#True
PosXm1 = GetGadgetAttribute(#canvas,#PB_Canvas_MouseX)-PosXm
PosYm1 = GetGadgetAttribute(#canvas,#PB_Canvas_MouseY)-PosYm
EndIf
CopyImage(#Image1,#Image0) ; Restore l'image originale
ResizeImage(#Image0,(ImageWidth(#Image0)-delta),(ImageHeight(#Image0)-delta),#PB_Image_Smooth)
StartDrawing(CanvasOutput(#canvas))
Box(-20,-20,WindowWidth(#Window)*2,WindowHeight(#Window)*2,RGB(255,255,255))
DrawAlphaImage(ImageID(#Image0),PosXm1+(delta/2),PosYm1+(delta/2),255)
StopDrawing()
Case #PB_EventType_LeftButtonUp
bm=#False
Case #PB_EventType_RightButtonUp
bm=#False
EndSelect
Select event
Case #PB_Event_SizeWindow
ResizeGadget(#Scroll,#PB_Ignore,#PB_Ignore,WindowWidth(#Window),WindowHeight(#Window))
win_w=WindowWidth(#Window)
win_h=WindowHeight(#Window)
EndSelect
Until Event= #PB_Event_CloseWindow
End