zSea - background image to the proportional stretching with inscribing

git-svn-id: svn://kolibrios.org@2236 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Marat Zakiyanov (Mario79) 2011-09-25 03:34:00 +00:00
parent 1a1680f416
commit 7f3443a0b9

View File

@ -43,8 +43,8 @@ background:
ret ret
;--------------------------------------------------------------------- ;---------------------------------------------------------------------
.stretch_crop: .stretch_crop:
; cmp [bgrmode],dword 3 cmp [bgrmode],dword 3
; jne .stretch_inscribe jne .stretch_inscribe
xor eax,eax xor eax,eax
mov [stretch_start_coordinates],eax mov [stretch_start_coordinates],eax
@ -120,7 +120,186 @@ background:
call [Scaling_Start] call [Scaling_Start]
call background_1 call background_1
ret ret
;---------------------------------------------------------------------
.stretch_inscribe:
xor eax,eax
mov [stretch_start_coordinates],eax
mcall 14
mov ebx,eax
and eax,0xffff
inc eax
mov [screen_high],eax
shr ebx,16
inc ebx
mov [screen_width],ebx
xchg eax,ebx
call calculate_relation
mov [screen_relation],eax
mov eax,[img_width]
mov ebx,[img_high]
call calculate_relation
mov [picture_relation],eax
cmp eax,[screen_relation]
ja @f
; Y = Yimg
; X = Yimg*Xscreen/Yscreen
mov eax,[screen_high] ;[img_high]
mov [stretch_img_high],eax
mov eax,[screen_high] ;[img_high]
imul eax,dword [img_width] ;[screen_width]
mov ebx,[img_high] ;[screen_high]
call integer_division
mov [stretch_img_width],eax
jmp .continue_1
@@:
; X = Ximg
; Y = Ximg*Yscreen/Xscreen
mov eax,[screen_width] ;[img_width]
mov [stretch_img_width],eax
mov eax,[screen_width] ;[img_width]
imul eax,dword [img_high] ;[screen_high]
mov ebx,[img_width] ;[screen_width]
call integer_division
mov [stretch_img_high],eax
.continue_1:
; mov ebx,[screen_width]
; shl ebx,16
; add ebx,[screen_high]
mov ebx,[stretch_img_width]
shl ebx,16
add ebx,[stretch_img_high]
push dword 0 ; eax - crop size
push dword 0 ; edi - background color
push dword 1 ; esi - filtering
push dword 0 ; edx - scaling mode
push dword [stretch_start_coordinates] ; ecx - start_coordinates
push ebx ; ebx - new_size
push dword image_file ; eax - convert data table
call [Scaling_Start]
mov eax,[raw_pointer_2]
mov [crop_raw_pointer],eax
mov [crop_raw_pointer_2],eax
mov eax,[raw_pointer_2]
mov eax,[eax+12] ;overall depth of the pixel
cmp al,24
je @f
push dword crop_image_file
call [convert_Conv_24b]
mov ecx,[raw_pointer_2]
mcall 68,13
@@:
mov ecx,[screen_width]
imul ecx,[screen_high]
lea ecx,[ecx*3]
add ecx,44
; mcall 68,20,,[crop_raw_pointer_2]
; mov [crop_raw_pointer_2],eax
mov eax,[crop_raw_pointer_2]
mov [crop_raw_pointer],eax
mcall 68,12
mov [crop_raw_pointer_2],eax
; fill of color
sub ecx,44
mov edi,eax
add edi,44
mov eax,0xaaaaaa
cld
@@:
stosb
ror eax,8
stosb
ror eax,8
stosb
rol eax,16
sub ecx,2
loop @b
; copy of data
mov eax,[screen_width]
sub eax,[stretch_img_width]
mov ebx,eax
lea eax,[eax*3]
shr ebx,1
lea ebx,[ebx*3]
mov edi,[screen_high]
sub edi,[stretch_img_high]
shr edi,1
imul edi,[screen_width]
lea edi,[edi*3]
add edi,[crop_raw_pointer_2]
add edi,44
add edi,ebx
mov esi,[crop_raw_pointer]
add esi,44
mov ebx,[stretch_img_width]
lea ebx,[ebx*3]
mov ecx,[stretch_img_high]
@@:
push ecx
mov ecx,ebx
rep movsb
pop ecx
add edi,eax
loop @b
; header
mov esi,[crop_raw_pointer]
mov edi,[crop_raw_pointer_2]
mov ecx,44/4
rep stosd
mcall 68,13,[crop_raw_pointer]
;set the background
mov eax,[crop_raw_pointer_2]
mov ebx,[screen_width]
mov [eax+4],ebx
mov ebx,[screen_high]
mov [eax+8],ebx
mov ecx,[screen_width] ; øèðèíà
test ecx,ecx
jz @f
mov edx,[screen_high] ; âûñîòà 
test edx,edx
jz @f
mcall 15,1 ; set size
mov esi,ecx
imul esi,edx
lea esi,[esi*3]
xor edx,edx
mov ecx,[crop_raw_pointer_2]
add ecx,44
mcall 15,5 ;15,5 set data
xor ecx,ecx
inc ecx
mcall 15,4 ; 15,4 set mode
dec ebx ; 15,3 redraw background
mcall
@@:
mcall 68,13,[crop_raw_pointer_2]
ret
;--------------------------------------------------------------------- ;---------------------------------------------------------------------
call_to_calculate_stretch_start_coordinates_X: call_to_calculate_stretch_start_coordinates_X:
dd calculate_stretch_start_coordinates_XL dd calculate_stretch_start_coordinates_XL
@ -168,9 +347,6 @@ calculate_stretch_start_coordinates_YD:
inc ecx inc ecx
jmp calculate_stretch_start_coordinates_YC.1 jmp calculate_stretch_start_coordinates_YC.1
;--------------------------------------------------------------------- ;---------------------------------------------------------------------
;.stretch_inscribe:
; ret
;---------------------------------------------------------------------
background_1: background_1:
mov ecx,[screen_width] ;[crop_img_width] ; øèðèíà mov ecx,[screen_width] ;[crop_img_width] ; øèðèíà
test ecx,ecx test ecx,ecx
@ -179,7 +355,7 @@ background_1:
test edx,edx test edx,edx
jz .end jz .end
mcall 15,1 ; set size mcall 15,1 ; set size
.1:
mov esi,ecx mov esi,ecx
imul esi,edx imul esi,edx
lea esi,[esi*3] lea esi,[esi*3]