new function 'buf2d_flood_fill'

git-svn-id: svn://kolibrios.org@1684 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
IgorA
2010-11-02 19:34:57 +00:00
parent 74c5e79c92
commit 1d27ab3331
2 changed files with 192 additions and 8 deletions

View File

@@ -84,7 +84,7 @@ draw_pixel:
add esi,ebx ;size_x*y+x
lea esi,[esi+esi*2] ;(size_x*y+x)*3
add esi,buf2d_data ;ptr+(size_x*y+x)*3
mov word[esi],dx ;copy pixel color
ror edx,16
mov byte[esi+2],dl
@@ -92,7 +92,42 @@ draw_pixel:
pop esi
@@:
ret
;endp
;input:
; ebx = coord x
; ecx = coord y
; edi = pointer to buffer struct
;output:
; eax = 梥<> <20><>
; <20> <20><><EFBFBD><20><EFBFBD><E8A8A1> eax = 0xffffffff
align 4
get_pixel_24:
mov eax,0xffffffff
bt ebx,31
jc @f
bt ecx,31
jc @f
cmp ebx,buf2d_w
jge @f
cmp ecx,buf2d_h
jge @f
push esi
mov esi,buf2d_w ;size x
imul esi,ecx ;size_x*y
add esi,ebx ;size_x*y+x
lea esi,[esi+esi*2] ;(size_x*y+x)*3
add esi,buf2d_data ;ptr+(size_x*y+x)*3
xor eax,eax
mov ax,word[esi] ;copy pixel color
ror eax,16
mov al,byte[esi+2]
ror eax,16
pop esi
@@:
ret
;ᮧ<><E1AEA7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
align 4
@@ -1002,15 +1037,13 @@ endp
align 4
proc buf_line_h, buf_struc:dword, coord_x0:dword, coord_y0:dword, coord_x1:dword, color:dword
pushad
mov edx,dword[color]
mov eax,edi
mov edi,[buf_struc]
cmp buf2d_bits,24
jne @f
jne .end24
mov ebx,dword[coord_x0]
mov ecx,dword[coord_y0]
mov edx,dword[color]
mov esi,dword[coord_x1]
@@: ;for (x=x0 ; x<x1; x++) ;------------------------------------
@@ -1020,6 +1053,7 @@ proc buf_line_h, buf_struc:dword, coord_x0:dword, coord_y0:dword, coord_x1:dword
jge @f
jmp @b
@@:
.end24:
popad
ret
endp
@@ -1139,6 +1173,141 @@ endl
ret
endp
;<3B><EFBFBD><E3ADAA><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E0A0AD><EFBFBD> 梥⮬
align 4
proc buf_flood_fill, buf_struc:dword, coord_x:dword, coord_y:dword, mode:dword, color_f:dword, color_b:dword
pushad
mov edi,[buf_struc]
cmp buf2d_bits,24
jne .end24
mov ebx,dword[coord_x]
mov ecx,dword[coord_y]
mov edx,dword[color_f]
mov esi,dword[color_b]
cmp dword[mode],1 ;<3B> <20><><EFBFBD><EFBFBD><EFBFBD><E1A8AC><EFBFBD><EFBFBD> <20><> 'mode' <20><><EFBFBD><E0A5A4><20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD><ECA7AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
je @f
call buf_flood_fill_recurs_0 ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><E1A5AB><><E6A2A5> esi
jmp .end24
@@:
call buf_flood_fill_recurs_1 ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>騥 梥<> esi
.end24:
popad
ret
endp
;input:
; ebx = coord_x
; ecx = coord_y
; edx = 梥<> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
; esi = 梥<> <20><EFBFBD><E0A0AD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><20><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
; edi = buf_struc
;output:
; eax = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
align 4
buf_flood_fill_recurs_0:
call get_pixel_24
cmp eax,0xffffffff ;if error coords
je .end_fun
cmp eax,edx ;<3B>᫨ 梥<> <20><><EFBFBD><EFBFBD><><E1AEA2><EFBFBD> <20> 梥⮬ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20>뫠 ᤥ<><E1A4A5><EFBFBD><EFBFBD>
je .end_fun
call draw_pixel
dec ebx
call get_pixel_24
cmp eax,esi
je @f
call buf_flood_fill_recurs_0
@@:
inc ebx
inc ebx
call get_pixel_24
cmp eax,esi
je @f
call buf_flood_fill_recurs_0
@@:
dec ebx
dec ecx
call get_pixel_24
cmp eax,esi
je @f
call buf_flood_fill_recurs_0
@@:
inc ecx
inc ecx
call get_pixel_24
cmp eax,esi
je @f
call buf_flood_fill_recurs_0
@@:
dec ecx
.end_fun:
ret
;input:
; ebx = coord_x
; ecx = coord_y
; edx = 梥<> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
; esi = 梥<> <20><><EFBFBD><EFBFBD><E1A5AB>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
; edi = buf_struc
;output:
; eax = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
align 4
buf_flood_fill_recurs_1:
call get_pixel_24
cmp eax,0xffffffff ;if error coords
je .end_fun
cmp eax,edx ;<3B>᫨ 梥<> <20><><EFBFBD><EFBFBD><><E1AEA2><EFBFBD> <20> 梥⮬ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20>뫠 ᤥ<><E1A4A5><EFBFBD><EFBFBD>
je .end_fun
cmp eax,esi ;<3B>᫨ 梥<> <20><><EFBFBD><EFBFBD> <20><><><E1AEA2><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 梥⮬ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><EFBFBD><E0A5AA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
jne .end_fun
call draw_pixel
dec ebx
call get_pixel_24
cmp eax,esi
jne @f
call buf_flood_fill_recurs_1
@@:
inc ebx
inc ebx
call get_pixel_24
cmp eax,esi
jne @f
call buf_flood_fill_recurs_1
@@:
dec ebx
dec ecx
call get_pixel_24
cmp eax,esi
jne @f
call buf_flood_fill_recurs_1
@@:
inc ecx
inc ecx
call get_pixel_24
cmp eax,esi
jne @f
call buf_flood_fill_recurs_1
@@:
dec ecx
.end_fun:
ret
align 4
proc buf_img_wdiv2, buf_struc:dword
pushad
@@ -2136,6 +2305,7 @@ EXPORTS:
dd sz_buf2d_draw_text, buf_draw_text
dd sz_buf2d_crop_color, buf_crop_color
dd sz_buf2d_offset_h, buf_offset_h
dd sz_buf2d_flood_fill, buf_flood_fill
dd 0,0
sz_lib_init db 'lib_init',0
sz_buf2d_create db 'buf2d_create',0
@@ -2159,3 +2329,5 @@ EXPORTS:
sz_buf2d_draw_text db 'buf2d_draw_text',0
sz_buf2d_crop_color db 'buf2d_crop_color',0
sz_buf2d_offset_h db 'buf2d_offset_h',0
sz_buf2d_flood_fill db 'buf2d_flood_fill',0