Subversion Repositories Kolibri OS

Rev

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