7
7
class Display_image :
8
8
def __init__ (self , width = 500 , height = 500 ):
9
9
pygame .init ()
10
+ self .new_x , self .new_y = 0 , 0
11
+ self .scale_rate = 1
12
+ self .image_drag = False
10
13
self .display_screen_resize (width , height )
11
14
pygame .display .set_caption ("Display Screen" )
12
- pygame .display .set_icon (pygame .image .load (resource_path ("assets\ icon\ icon.png" )))
15
+ pygame .display .set_icon (pygame .image .load (resource_path ("assets/ icon/ icon.png" )))
13
16
14
17
self .limit_size = [800 , 600 ]
15
- self .or_image = pygame .image .load (resource_path (sample_image_path )).convert_alpha ()
16
- self .image = pygame .image .load (resource_path (sample_image_path )).convert_alpha ()
17
- self .new_x = 0
18
- self .new_y = 0
19
- self .scale_rate = 1
18
+ self .image_path = resource_path (sample_image_path )
19
+ self .load_initial_image ()
20
+
21
+ def load_initial_image (self ):
22
+ self .or_image = pygame .image .load (self .image_path ).convert_alpha ()
23
+ self .image = self .or_image .copy ()
20
24
self .scale_image ()
21
- self .image_drag = False
22
25
23
26
def image_load (self , image_path ):
24
- image_path .replace ("\\ " , "/" )
25
- file_name = re .split ("/" , image_path )[- 1 ]
26
- file_format = file_name .split ('.' )[- 1 ]
27
- if not file_format in ['mp4' , 'avi' , 'flv' ]:
28
- self .or_image = pygame .image .load (image_path )
27
+ image_path = image_path .replace ("\\ " , "/" )
28
+ if not image_path .split ('.' )[- 1 ] in ['mp4' , 'avi' , 'flv' ]:
29
+ self .or_image = pygame .image .load (image_path ).convert_alpha ()
29
30
self .scale_image ()
30
31
31
32
def display_screen_resize (self , width = 10 , height = 10 , mode = 0 ):
@@ -36,74 +37,58 @@ def display_screen_resize(self, width=10, height=10, mode=0):
36
37
self .display_screen = pygame .display .set_mode (self .image .get_size ())
37
38
38
39
def image_resize_limit (self ):
39
- self_image_size = self .image .get_size ()
40
- x_rate = 1
41
- y_rate = 1
42
- new_rate = 1
43
- if self_image_size [0 ] > self .limit_size [0 ]:
44
- x_rate = self .limit_size [0 ] / self_image_size [0 ]
45
- if self_image_size [1 ] > self .limit_size [1 ]:
46
- y_rate = self .limit_size [1 ] / self_image_size [1 ]
47
- new_rate = min (x_rate , y_rate )
48
- self .or_scale_rate = new_rate
49
- self .image = pygame .transform .scale (self .or_image , (self_image_size [0 ]* new_rate , self_image_size [1 ]* new_rate ))
40
+ img_size = self .image .get_size ()
41
+ x_rate = self .limit_size [0 ] / img_size [0 ] if img_size [0 ] > self .limit_size [0 ] else 1
42
+ y_rate = self .limit_size [1 ] / img_size [1 ] if img_size [1 ] > self .limit_size [1 ] else 1
43
+ self .scale_rate = min (x_rate , y_rate )
44
+ self .image = pygame .transform .scale (self .or_image , (int (img_size [0 ] * self .scale_rate ), int (img_size [1 ] * self .scale_rate )))
50
45
self .scale_image ()
51
46
52
47
def cv_to_pygame (self , cv_img ):
53
- frame = cv2 .cvtColor (cv_img , cv2 .COLOR_BGR2RGB )
54
- frame = cv2 .transpose (frame )
55
- frame = pygame .surfarray .make_surface (frame )
56
- self .or_image = frame
48
+ rgb_img = cv2 .cvtColor (cv_img , cv2 .COLOR_BGR2RGB )
49
+ self .or_image = pygame .surfarray .make_surface (rgb_img .swapaxes (0 , 1 ))
57
50
self .scale_image ()
58
51
59
52
def display_update (self ):
60
53
self .display_screen .fill ('black' )
61
- if self .display_screen .get_size () != self .image .get_size ():
62
- self .display_screen_resize (mode = 1 )
63
54
self .display_screen .blit (self .scaled_image , self .scaled_image_rect )
64
55
pygame .display .update ()
65
56
66
57
def scale_image (self ):
67
- image_size = self .image .get_size ()
68
- self .scaled_image = pygame .transform .scale (self .or_image , (image_size [0 ]* self .scale_rate , image_size [1 ]* self .scale_rate ))
69
- self .scaled_image_rect = self .scaled_image .get_rect (topleft = (self .new_x , self .new_y ))
58
+ img_size = self .image .get_size ()
59
+ self .scaled_image = pygame .transform .scale (self .or_image , (int (img_size [0 ] * self .scale_rate ), int (img_size [1 ] * self .scale_rate )))
60
+ self .scaled_image_rect = self .scaled_image .get_rect (topleft = (self .new_x , self .new_y ))
61
+
62
+ def handle_events (self ):
63
+ for event in pygame .event .get ():
64
+ if event .type == pygame .QUIT :
65
+ self .quit ()
66
+ elif event .type == pygame .MOUSEBUTTONDOWN :
67
+ if event .button == 1 and self .scaled_image_rect .collidepoint (event .pos ):
68
+ self .image_drag = True
69
+ elif event .button == 2 :
70
+ self .reset_image ()
71
+ elif event .button == 4 :
72
+ self .scale_rate += 0.1
73
+ self .scale_image ()
74
+ elif event .button == 5 :
75
+ self .scale_rate = max (0.1 , self .scale_rate - 0.1 )
76
+ self .scale_image ()
77
+ elif event .type == pygame .MOUSEBUTTONUP and event .button == 1 :
78
+ self .image_drag = False
79
+ elif event .type == pygame .MOUSEMOTION and self .image_drag :
80
+ self .scaled_image_rect .move_ip (event .rel )
81
+ self .new_x , self .new_y = self .scaled_image_rect .topleft
82
+
83
+ def reset_image (self ):
84
+ self .new_x , self .new_y , self .scale_rate = 0 , 0 , 1
85
+ self .scale_image ()
70
86
71
87
def run (self ):
72
88
while True :
73
- for event in pygame .event .get ():
74
- if event .type == pygame .QUIT :
75
- self .quit ()
76
- elif event .type == pygame .MOUSEBUTTONDOWN :
77
- if event .button == 1 :
78
- if self .scaled_image_rect .collidepoint (event .pos ):
79
- self .image_drag = True
80
- elif event .button == 2 :
81
- self .new_x = 0
82
- self .new_y = 0
83
- self .scale_rate = 1
84
- self .scale_image ()
85
- elif event .button == 4 :
86
- self .scale_rate += 0.1
87
- self .scale_image ()
88
- elif event .button == 5 :
89
- self .scale_rate -= 0.1
90
- if self .scale_rate < 0 :
91
- self .scale_rate = 0
92
- self .scale_image ()
93
- # 1 - left click
94
- # 2 - middle click
95
- # 3 - right click
96
- # 4 - scroll up
97
- # 5 - scroll down
98
- elif event .type == pygame .MOUSEBUTTONUP :
99
- self .image_drag = False
100
- if event .type == pygame .MOUSEMOTION :
101
- if self .image_drag :
102
- self .scaled_image_rect .move_ip (event .rel )
103
- self .new_x = self .scaled_image_rect [0 ]
104
- self .new_y = self .scaled_image_rect [1 ]
89
+ self .handle_events ()
105
90
self .display_update ()
106
91
107
92
def quit (self ):
108
93
pygame .quit ()
109
- sys .exit ()
94
+ sys .exit ()
0 commit comments