Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
3036 | dunkaist | 1 | use32 |
2 | org 0x0 |
||
3 | db 'MENUET01' |
||
4 | dd 0x01, START, I_END, E_END, E_END, 0, 0 |
||
5 | |||
6 | ;----------------------------------------------------------------------------- |
||
7 | |||
8 | include '../../../../../proc32.inc' |
||
9 | include '../../../../../macros.inc' |
||
10 | include '../../../../../dll.inc' |
||
11 | ;include '../../../../../debug.inc' |
||
12 | |||
13 | include '../../libio/libio.inc' |
||
14 | include '../../libimg/libimg.inc' |
||
15 | |||
16 | ;----------------------------------------------------------------------------- |
||
17 | |||
18 | START: |
||
19 | mcall 68, 11 |
||
20 | |||
21 | stdcall dll.Load, @IMPORT |
||
22 | or eax, eax |
||
23 | jnz exit |
||
24 | |||
25 | invoke file.open, input_file, O_READ |
||
26 | or eax, eax |
||
27 | jz exit |
||
28 | mov [fh], eax |
||
29 | |||
30 | invoke file.size, input_file |
||
31 | mov [img_data_len], ebx |
||
32 | |||
33 | stdcall mem.Alloc, ebx |
||
34 | or eax, eax |
||
35 | jz exit |
||
36 | mov [img_data], eax |
||
37 | |||
38 | invoke file.read, [fh], eax, [img_data_len] |
||
39 | cmp eax, -1 |
||
40 | je exit |
||
41 | cmp eax, [img_data_len] |
||
42 | jne exit |
||
43 | |||
44 | invoke file.close, [fh] |
||
45 | inc eax |
||
46 | jz exit |
||
47 | |||
48 | invoke img.decode, [img_data], [img_data_len], 0 |
||
49 | or eax, eax |
||
50 | jz exit |
||
51 | mov [image_initial], eax |
||
52 | |||
53 | stdcall mem.Free, [img_data] |
||
54 | test eax, eax |
||
55 | jz exit |
||
56 | ;----------------------------------------------------------------------------- |
||
57 | |||
58 | still: |
||
59 | mcall 10 |
||
60 | cmp eax, 1 |
||
61 | je .draw_window |
||
62 | cmp eax, 2 |
||
63 | je .key |
||
64 | cmp eax, 3 |
||
65 | je .button |
||
66 | jmp still |
||
67 | |||
68 | |||
69 | .draw_window: |
||
70 | mcall 12, 1 |
||
71 | mcall 0, <200, 150>, <200, 150>, 0x73FFFFFF, 0x00000000, window_title |
||
72 | call draw_image |
||
73 | mcall 12, 2 |
||
74 | jmp still |
||
75 | |||
76 | .key: |
||
77 | mcall 2 |
||
78 | jmp still |
||
79 | |||
80 | .button: |
||
81 | mcall 17 |
||
82 | shr eax, 8 |
||
83 | cmp eax, 1 |
||
84 | jne still |
||
85 | |||
86 | exit: |
||
87 | cmp [image_initial], 0 |
||
88 | je @f |
||
89 | invoke img.destroy, [image_initial] |
||
90 | @@: |
||
91 | cmp [image_scaled], 0 |
||
92 | je @f |
||
93 | invoke img.destroy, [image_scaled] |
||
94 | @@: |
||
95 | mcall -1 |
||
96 | |||
97 | |||
98 | proc draw_image |
||
99 | |||
100 | cmp [image_scaled], 0 |
||
101 | je @f |
||
102 | invoke img.destroy, [image_scaled] |
||
103 | @@: |
||
104 | |||
105 | mcall 9, proc_info, -1 |
||
106 | |||
107 | mov ecx, [proc_info.client_box.height] |
||
108 | inc ecx |
||
109 | mov edx, [proc_info.client_box.width] |
||
110 | inc edx |
||
111 | |||
112 | mov ebx, [image_initial] |
||
113 | ; invoke img.scale, ebx, 1, 2, 5, 5, 0, LIBIMG_SCALE_TYPE_STRETCH, LIBIMG_SCALE_ALG_BILINEAR, edx, ecx |
||
114 | ; invoke img.scale, ebx, 1, 2, 5, 5, 0, LIBIMG_SCALE_TYPE_STRETCH, LIBIMG_SCALE_ALG_INTEGER, 3, 3 |
||
115 | invoke img.scale, ebx, 0, 0, [ebx + Image.Width], [ebx + Image.Height], 0, LIBIMG_SCALE_TYPE_STRETCH, LIBIMG_SCALE_ALG_BILINEAR, edx, ecx |
||
116 | |||
117 | ; proc img.scale _src, _crop_x, _crop_y, _crop_width, _crop_height, _dst, _scale_type, _scale_alg, _param1, _param2 |
||
118 | ; see libimg.inc for available scale types and algorithms |
||
119 | ; LIBIMG_SCALE_ALG_BILINEAR: _param1, _param2 -- width and height of rectangle to fit _src image to |
||
120 | ; LIBIMG_SCALE_ALG_INTEGER: _param1 -- scale factor (i.e. 3 means scaling 7x7 to 21x21); _param2 ignored |
||
121 | ; LIBIMG_SCALE_TYPE_*: just try and see, they are common STRETCH, FIT_BY_WIDTH etc. |
||
122 | ; returns pointer to a scaled image |
||
123 | |||
124 | ; invoke img.scale, ebx, 0, 0, [ebx + Image.Width], [ebx + Image.Height], 0, LIBIMG_SCALE_TYPE_STRETCH, LIBIMG_SCALE_ALG_INTEGER, 3, 3 |
||
125 | test eax, eax |
||
126 | jz exit |
||
127 | mov [image_scaled], eax |
||
128 | |||
129 | invoke img.draw, eax, 0, 0, [eax + Image.Width], [eax + Image.Height], 0, 0 |
||
130 | |||
131 | ret |
||
132 | endp |
||
133 | |||
134 | ;----------------------------------------------------------------------------- |
||
135 | |||
136 | window_title db 'img.scale example',0 |
||
137 | |||
138 | input_file db '/hd0/1/gray_5x7.tiff',0 |
||
139 | ;input_file db '/hd0/1/grayscale_123x123.tiff',0 |
||
140 | ;input_file db '/hd0/1/grayscale_357x357.tiff',0 |
||
141 | ;input_file db '/hd0/1/grayscale_620x620.tiff',0 |
||
142 | ;input_file db '/hd0/1/rgb_220.jpg',0 |
||
143 | ;input_file db '/hd0/1/rgba_217.tiff',0 |
||
144 | ;input_file db '/hd0/1/rgb_7x9.tiff',0 |
||
145 | ;input_file db '/hd0/1/rgba_7x9.tiff',0 |
||
146 | ;input_file db '/hd0/1/gray_7x9.tiff',0 |
||
147 | ;input_file db '/hd0/1/rgb_70x90.png',0 |
||
148 | ;----------------------------------------------------------------------------- |
||
149 | |||
150 | align 4 |
||
151 | @IMPORT: |
||
152 | |||
153 | library \ |
||
154 | libio , 'libio.obj' , \ |
||
155 | libimg , 'libimg.obj' |
||
156 | |||
157 | import libio , \ |
||
158 | libio.init , 'lib_init' , \ |
||
159 | file.size , 'file_size' , \ |
||
160 | file.open , 'file_open' , \ |
||
161 | file.read , 'file_read' , \ |
||
162 | file.close , 'file_close' |
||
163 | |||
164 | import libimg , \ |
||
165 | libimg.init , 'lib_init' , \ |
||
166 | img.decode , 'img_decode' , \ |
||
167 | img.destroy , 'img_destroy' , \ |
||
168 | img.draw , 'img_draw' , \ |
||
169 | img.scale , 'img_scale' , \ |
||
170 | img.formats_table,'img_formats_table' |
||
171 | |||
172 | ;----------------------------------------------------------------------------- |
||
173 | |||
174 | I_END: |
||
175 | |||
176 | fh dd ? |
||
177 | img_data_len dd ? |
||
178 | img_data dd ? |
||
179 | |||
180 | image_initial dd ? |
||
181 | image_scaled dd ? |
||
182 | |||
183 | proc_info process_information |
||
184 | |||
185 | rd 0x1000 ; stack |
||
186 | E_END:200,>200,> |