Rev 1958 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1958 | Rev 2163 | ||
---|---|---|---|
Line 36... | Line 36... | ||
36 | ;include 'macros.inc' |
36 | ;include 'macros.inc' |
37 | include '../../../../macros.inc' |
37 | include '../../../../macros.inc' |
38 | ;--------------------------------------------------------------------- |
38 | ;--------------------------------------------------------------------- |
39 | START: |
39 | START: |
40 | pushad |
40 | pushad |
41 | mov edi,dword [esp+56] |
41 | mov eax,dword [esp+60] ; eax - crop size |
- | 42 | mov ebx,eax |
|
- | 43 | and eax,0xffff |
|
- | 44 | shr ebx,16 |
|
- | 45 | mov [crop_x],ebx |
|
- | 46 | mov [crop_y],eax |
|
- | 47 | mov edi,dword [esp+56] ; edi - background color |
|
42 | mov esi,dword [esp+52] |
48 | mov esi,dword [esp+52] ; esi - filtering |
43 | mov edx,dword [esp+48] |
49 | mov edx,dword [esp+48] ; edx - scaling mode |
44 | mov ecx,dword [esp+44] |
50 | mov ecx,dword [esp+44] ; ecx - start_coordinates |
45 | mov ebx,dword [esp+40] |
51 | mov ebx,dword [esp+40] ; ebx - new_size |
46 | mov eax,dword [esp+36] |
52 | mov eax,dword [esp+36] ; eax - convert data table |
47 | mov [pointer],eax |
53 | mov [pointer],eax |
48 | test bx,bx |
54 | test bx,bx |
49 | jnz @f |
55 | jnz @f |
- | 56 | ||
50 | inc bx |
57 | inc bx |
51 | @@: |
58 | @@: |
52 | ror ebx,16 |
59 | ror ebx,16 |
53 | test bx,bx |
60 | test bx,bx |
54 | jnz @f |
61 | jnz @f |
- | 62 | ||
55 | inc bx |
63 | inc bx |
56 | @@: |
64 | @@: |
57 | rol ebx,16 |
65 | rol ebx,16 |
58 | mov [new_size],ebx |
66 | mov [new_size],ebx |
59 | mov [start_coordinates],ecx |
67 | mov [start_coordinates],ecx |
Line 106... | Line 114... | ||
106 | mov ebx,[eax+4] |
114 | mov ebx,[eax+4] |
107 | mov [x],ebx |
115 | mov [x],ebx |
108 | imul ebx,[bytes_to_pixel] |
116 | imul ebx,[bytes_to_pixel] |
109 | mov [size_x],ebx |
117 | mov [size_x],ebx |
Line -... | Line 118... | ||
- | 118 | ||
- | 119 | mov eax,[crop_y] |
|
- | 120 | test eax,eax |
|
- | 121 | jz @f |
|
- | 122 | mov [y],eax |
|
- | 123 | @@: |
|
- | 124 | mov eax,[crop_x] |
|
- | 125 | test eax,eax |
|
- | 126 | jz @f |
|
- | 127 | mov [x],eax |
|
110 | 128 | @@: |
|
111 | mov eax,100 |
129 | mov eax,100 |
112 | shl eax,12 |
130 | shl eax,12 |
113 | mov ebx,[scaling_mode] |
131 | mov ebx,[scaling_mode] |
114 | test ebx,ebx |
132 | test ebx,ebx |
Line 118... | Line 136... | ||
118 | xor edx,edx |
136 | xor edx,edx |
119 | div ebx |
137 | div ebx |
120 | mov [scaling_delta],eax |
138 | mov [scaling_delta],eax |
Line 121... | Line 139... | ||
121 | 139 | ||
122 | call .get_memory |
- | |
123 | cmp [scaling_mode],0 |
- | |
124 | jne @f |
140 | call .get_memory |
125 | call .scaling |
- | |
126 | jmp .ret_ok |
- | |
127 | @@: |
- | |
128 | call .scaling_2 |
- | |
129 | 141 | call .scaling |
|
130 | ;--------------------------------------------------------------------- |
142 | ;--------------------------------------------------------------------- |
131 | .ret_ok: |
143 | .ret_ok: |
132 | mcall 68,13,[area_for_x] |
144 | mcall 68,13,[area_for_x] |
133 | mov ebx,[pointer] |
145 | mov ebx,[pointer] |
Line 145... | Line 157... | ||
145 | ; mov [ebx+40],eax |
157 | ; mov [ebx+40],eax |
146 | ; mov eax,[y] |
158 | ; mov eax,[y] |
147 | ; mov [ebx+44],eax |
159 | ; mov [ebx+44],eax |
148 | .exit: |
160 | .exit: |
149 | popad |
161 | popad |
150 | ret 24 |
162 | ret 28 |
151 | ;--------------------------------------------------------------------- |
163 | ;--------------------------------------------------------------------- |
152 | align 4 |
164 | align 4 |
153 | .scaling: |
165 | .scaling: |
154 | xor ecx,ecx |
- | |
155 | .y: |
- | |
156 | xor ebx,ebx |
- | |
157 | ;------------------------- |
- | |
158 | .x: |
- | |
159 | call ebp |
- | |
160 | inc ebx |
- | |
161 | cmp bx,[new_size.x1] |
- | |
162 | jb .x |
- | |
163 | ;------------------------- |
- | |
164 | inc ecx |
- | |
165 | cmp cx,[new_size.y1] |
- | |
166 | jb .y |
- | |
167 | ret |
- | |
168 | ;--------------------------------------------------------------------- |
- | |
169 | align 4 |
- | |
170 | .scaling_2: |
- | |
171 | xor eax,eax |
166 | xor eax,eax |
172 | mov ax,[start_coordinates.y] |
167 | mov ax,[start_coordinates.y] |
173 | imul eax,[size_x] |
168 | imul eax,[size_x] |
174 | add esi,eax |
169 | add esi,eax |
175 | xor eax,eax |
170 | xor eax,eax |
Line 272... | Line 267... | ||
272 | jmp .offset_x |
267 | jmp .offset_x |
273 | ;-------------------------------- |
268 | ;-------------------------------- |
274 | align 4 |
269 | align 4 |
275 | .new_y: |
270 | .new_y: |
276 | mov [temp_y],eax |
271 | mov [temp_y],eax |
277 | - | ||
278 | mov ebx,[scaling_mode] |
272 | mov ebx,[scaling_mode] |
279 | test ebx,ebx |
273 | test ebx,ebx |
280 | jz @f |
274 | jz @f |
- | 275 | ||
281 | imul eax,[scaling_delta] |
276 | imul eax,[scaling_delta] |
282 | ;-------------------------------- |
277 | ;-------------------------------- |
283 | push ebx |
278 | push ebx |
284 | mov ebx,eax |
279 | mov ebx,eax |
285 | shr eax,12 |
280 | shr eax,12 |
Line 288... | Line 283... | ||
288 | shr ebx,12 |
283 | shr ebx,12 |
289 | mov [next_pixel_y],ebx |
284 | mov [next_pixel_y],ebx |
290 | pop ebx |
285 | pop ebx |
291 | ;-------------------------------- |
286 | ;-------------------------------- |
292 | jmp .ex_1 |
287 | jmp .ex_1 |
- | 288 | ;-------------------------------- |
|
293 | align 4 |
289 | align 4 |
294 | @@: |
290 | @@: |
295 | ;-------------------------------- |
- | |
296 | imul eax,dword [y] |
291 | imul eax,dword [y] |
- | 292 | ;-------------------------------- |
|
- | 293 | align 4 |
|
- | 294 | @@: |
|
297 | mov bx,word [new_size.y1] |
295 | mov bx,word [new_size.y1] |
298 | ;-------------------------------- |
296 | ;-------------------------------- |
299 | align 4 |
297 | align 4 |
300 | .y_div: |
298 | .y_div: |
301 | test ebx,ebx |
299 | test ebx,ebx |
302 | jnz @f |
300 | jnz @f |
303 | inc ebx |
301 | inc ebx |
- | 302 | ;-------------------------------- |
|
304 | align 4 |
303 | align 4 |
305 | @@: |
304 | @@: |
306 | xor edx,edx |
305 | xor edx,edx |
307 | div ebx |
306 | div ebx |
308 | ;-------------------------------- |
307 | ;-------------------------------- |
Line 354... | Line 353... | ||
354 | jmp .ex_2 |
353 | jmp .ex_2 |
355 | ;-------------------------------- |
354 | ;-------------------------------- |
356 | align 4 |
355 | align 4 |
357 | @@: |
356 | @@: |
358 | imul eax,dword [x] |
357 | imul eax,dword [x] |
- | 358 | ;-------------------------------- |
|
- | 359 | align 4 |
|
- | 360 | @@: |
|
359 | mov bx,word [new_size.x1] |
361 | mov bx,word [new_size.x1] |
360 | ;-------------------------------- |
362 | ;-------------------------------- |
361 | align 4 |
363 | align 4 |
362 | .x_div: |
364 | .x_div: |
363 | test ebx,ebx |
365 | test ebx,ebx |
Line 402... | Line 404... | ||
402 | add ecx,esi |
404 | add ecx,esi |
403 | ret |
405 | ret |
404 | ;--------------------------------------------------------------------- |
406 | ;--------------------------------------------------------------------- |
405 | align 4 |
407 | align 4 |
406 | .get_memory: |
408 | .get_memory: |
407 | - | ||
408 | xor ecx,ecx |
409 | xor ecx,ecx |
409 | mov cx,[new_size.x1] |
410 | mov cx,[new_size.x1] |
410 | shl ecx,3 |
411 | shl ecx,3 |
411 | mcall 68,12 |
412 | mcall 68,12 |
412 | mov [area_for_x],eax |
413 | mov [area_for_x],eax |
Line 420... | Line 421... | ||
420 | cmp eax,1 |
421 | cmp eax,1 |
421 | jne @f |
422 | jne @f |
422 | mov eax,3 |
423 | mov eax,3 |
423 | @@: |
424 | @@: |
424 | imul ecx,eax |
425 | imul ecx,eax |
- | 426 | mov edx,ecx |
|
- | 427 | add ecx,44 |
|
- | 428 | mov eax,[image_file] |
|
- | 429 | add ecx,[eax+24] ;palette area size |
|
425 | mcall 68,12 |
430 | mcall 68,12 |
426 | mov [raw_area],eax |
431 | mov [raw_area],eax |
427 | mov edi,eax |
432 | mov edi,eax |
- | 433 | ||
- | 434 | ; create RAW header |
|
- | 435 | push esi |
|
- | 436 | mov esi,[image_file] |
|
- | 437 | mov ecx,44/4 |
|
- | 438 | cld |
|
- | 439 | rep movsd ;copy the 3 first dword for the structure of RAW |
|
- | 440 | mov edi,[raw_area] |
|
- | 441 | movzx eax,word [new_size.x1] |
|
- | 442 | mov [edi+4],eax |
|
- | 443 | movzx eax,word [new_size.y1] |
|
- | 444 | mov [edi+8],eax |
|
- | 445 | mov [edi+32],edx ;rgb area size |
|
- | 446 | xor eax,eax |
|
- | 447 | mov [edi+36],eax ;transparency area pointer |
|
- | 448 | mov [edi+40],eax ;transparency area size |
|
- | 449 | ||
- | 450 | cmp [filtering],eax ;0 or 1 |
|
- | 451 | je @f |
|
- | 452 | ||
- | 453 | mov [edi+20],eax ;palette area pointer |
|
- | 454 | mov [edi+24],eax ;palette area size |
|
- | 455 | mov [edi+28],dword 44 ;rgb area pointer |
|
- | 456 | cmp [edi+12],dword 8 ;overall depth of the pixel |
|
- | 457 | ja .not_overall_depth_8 |
|
- | 458 | ||
- | 459 | mov [edi+12],dword 24 ;overall depth of the pixel |
|
- | 460 | mov [edi+16],word 8 ;channel depth of the pixel |
|
- | 461 | .not_overall_depth_8: |
|
- | 462 | add edi,44 |
|
- | 463 | jmp .end |
|
- | 464 | @@: |
|
- | 465 | mov eax,[edi+24] |
|
- | 466 | add edi,44 |
|
- | 467 | test eax,eax ;palette area is present? |
|
- | 468 | jz @f |
|
- | 469 | ||
- | 470 | sub esi,44 |
|
- | 471 | ||
- | 472 | mov ecx,[esi+24] |
|
- | 473 | shr ecx,2 |
|
- | 474 | add esi,[esi+20] |
|
- | 475 | cld |
|
- | 476 | rep movsd ;copy palette area |
|
- | 477 | @@: |
|
- | 478 | ||
- | 479 | .end: |
|
- | 480 | pop esi |
|
- | 481 | ||
428 | ret |
482 | ret |
429 | ;--------------------------------------------------------------------- |
483 | ;--------------------------------------------------------------------- |
430 | include 'b_filter.inc' |
484 | include 'b_filter.inc' |
431 | ;--------------------------------------------------------------------- |
485 | ;--------------------------------------------------------------------- |
432 | align 4 |
486 | align 4 |
433 | EXPORTS: |
487 | EXPORTS: |
434 | dd szStart, START |
488 | dd szStart, START |
435 | dd szVersion, 0x00010002 |
489 | dd szVersion, 0x00010003 |
436 | dd 0 |
490 | dd 0 |
Line 437... | Line 491... | ||
437 | 491 | ||
438 | szStart db 'START',0 |
492 | szStart db 'START',0 |
Line 446... | Line 500... | ||
446 | .x1: dw 0 |
500 | .x1: dw 0 |
Line 447... | Line 501... | ||
447 | 501 | ||
448 | x: dd 0 |
502 | x: dd 0 |
Line -... | Line 503... | ||
- | 503 | y: dd 0 |
|
- | 504 | ||
- | 505 | crop_x dd 0 |
|
449 | y: dd 0 |
506 | crop_y dd 0 |
450 | 507 | ||
Line 451... | Line 508... | ||
451 | size_x dd 0 |
508 | size_x dd 0 |
452 | bytes_to_pixel dd 0 |
509 | bytes_to_pixel dd 0 |