forked from KolibriOS/kolibrios
new function 'buf2d_flood_fill'
git-svn-id: svn://kolibrios.org@1684 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
74c5e79c92
commit
1d27ab3331
@ -62,7 +62,7 @@ table { font-size: 15px; }
|
||||
С ее помощью можно создавать буфера с изображениями в памяти, и при необходимости выводить их на экран.
|
||||
Изображения можно накладывать одно на другое, поддерживается работа с прозрачными изображениями, есть функция рисования лини пока на этом все.</p>
|
||||
|
||||
<p>Последнее обновление библиотеки 07.10.10.</p>
|
||||
<p>Последнее обновление библиотеки 02.11.10.</p>
|
||||
|
||||
<h1><a name="f_buf">Форматы буферов</a></h1>
|
||||
<p>Поддерживается 3 формата буферов.
|
||||
@ -189,6 +189,15 @@ stdcall [buf2d_convert_text_matrix], buf_1</pre>
|
||||
<h4>buf2d_offset_h</h4>
|
||||
<p>Сдвиг изображения в буфере по высоте вверх или вниз.</p>
|
||||
|
||||
<h4>buf2d_flood_fill</h4>
|
||||
<p>Функция для рекурсивной заливки выбранным цветом. Имееться два варианта заливки. Пример:</p>
|
||||
<pre>stdcall [buf2d_flood_fill], buf_0, 100,200, 0, 0xff,0xff0000</pre>
|
||||
<p>где buf_0 - структура буфера;
|
||||
100,200 - координаты точки, с которой начнется заливка;
|
||||
0 - параметр, определяет алгоритм заливки (может быть 0 или 1);
|
||||
0xff - цвет заливки;</p>
|
||||
0xff0000 - зависит от значения 4-го параметра, 1) если 0 - цвет до которого будет заливаться область; 2) если 1 - цвет области которая будет заливатся;</p>
|
||||
|
||||
<h1><a name="const">Константы</a></h1>
|
||||
<h4>BUF2D_OPT_CROP_TOP equ 1</h4>
|
||||
<p>Константа для функции buf2d_crop_color, обозначает обрезку буфера сверху</p>
|
||||
@ -225,6 +234,7 @@ import_buf2d_lib:
|
||||
buf2d_draw_text dd sz_buf2d_draw_text
|
||||
buf2d_crop_color dd sz_buf2d_crop_color
|
||||
buf2d_offset_h dd sz_buf2d_offset_h
|
||||
buf2d_flood_fill dd sz_buf2d_flood_fill
|
||||
|
||||
dd 0,0
|
||||
sz_lib_init db 'lib_init',0
|
||||
@ -248,7 +258,8 @@ import_buf2d_lib:
|
||||
sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
|
||||
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</pre>
|
||||
sz_buf2d_offset_h db 'buf2d_offset_h',0
|
||||
sz_buf2d_flood_fill db 'buf2d_flood_fill',0</pre>
|
||||
|
||||
<h1><a name="hist">История</a></h1>
|
||||
<p>02.07.10 - самая первая версия библиотеки, 2 примера использования.</p>
|
||||
@ -262,5 +273,6 @@ import_buf2d_lib:
|
||||
<p>04.10.10 - добавлена функция buf2d_filled_rect_by_size, доработана функция buf_bit_blt_alpha.</p>
|
||||
<p>07.10.10 - доработана функция buf_bit_blt (при попытке нарисовать изображение за пределами правого края буфера приложение вызвавшее функцию падало).</p>
|
||||
<p>11.10.10 - исправлено задание цветов в некоторых функциях, красный и синий цвета поменял местами. Теперь цвета совпадают с сисемными функциями.</p>
|
||||
<p>02.11.10 - добавлена функция buf2d_flood_fill.</p>
|
||||
</body>
|
||||
</html>
|
@ -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 = 梥â â®çª¨
|
||||
; ¢ á«ãç ¥ ®è¨¡ª¨ 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
|
||||
|
||||
|
||||
;ᮧ¤ ¨¥ ¡ãä¥à
|
||||
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
|
||||
|
||||
;äãªæ¨ï ¤«ï § «¨¢ª¨ ®¡« á⨠¢ë¡à ë¬ æ¢¥â®¬
|
||||
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 ;¢ § ¢¨á¨¬®á⨠®â 'mode' ®¯à¥¤¥«ï¥¬ ª ª¨¬ «£®à¨â¬®¬ ¡ã¤¥¬ ¯®«ì§®¢ âìáï
|
||||
je @f
|
||||
call buf_flood_fill_recurs_0 ;§ «¨¢ ¥¬ ¤® ¯¨ªá¥«¥© 梥â esi
|
||||
jmp .end24
|
||||
@@:
|
||||
call buf_flood_fill_recurs_1 ;§ «¨¢ ¥¬ ¯¨ªá¥«¨ ¨¬¥î騥 梥â esi
|
||||
|
||||
.end24:
|
||||
popad
|
||||
ret
|
||||
endp
|
||||
|
||||
;input:
|
||||
; ebx = coord_x
|
||||
; ecx = coord_y
|
||||
; edx = 梥⠧ «¨¢ª¨
|
||||
; esi = æ¢¥â £à ¨æë, ¤® ª®â®à®© ¡ã¤¥â ¨â¨ § «¨¢ª
|
||||
; edi = buf_struc
|
||||
;output:
|
||||
; eax = ¯®àâ¨âáï
|
||||
align 4
|
||||
buf_flood_fill_recurs_0:
|
||||
call get_pixel_24
|
||||
cmp eax,0xffffffff ;if error coords
|
||||
je .end_fun
|
||||
cmp eax,edx ;¥á«¨ 梥⠯¨ªá¥«ï ᮢ¯ « á 梥⮬ § «¨¢ª¨, § ç¨â § «¨¢ª ¢ í⮩ ®¡« á⨠㦥 ¡ë« ᤥ«
|
||||
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 = 梥⠧ «¨¢ª¨
|
||||
; esi = 梥⠯¨ªá¥«¥©, ¯® ª®â®àë¬ ¡ã¤¥â ¨â¨ § «¨¢ª
|
||||
; edi = buf_struc
|
||||
;output:
|
||||
; eax = ¯®àâ¨âáï
|
||||
align 4
|
||||
buf_flood_fill_recurs_1:
|
||||
call get_pixel_24
|
||||
cmp eax,0xffffffff ;if error coords
|
||||
je .end_fun
|
||||
cmp eax,edx ;¥á«¨ 梥⠯¨ªá¥«ï ᮢ¯ « á 梥⮬ § «¨¢ª¨, § ç¨â § «¨¢ª ¢ í⮩ ®¡« á⨠㦥 ¡ë« ᤥ«
|
||||
je .end_fun
|
||||
cmp eax,esi ;¥á«¨ 梥⠯¨ªá¥«ï ¥ ᮢ¯ « á § «¨¢ ¥¬ë¬ 梥⮬ § «¨¢ª¨, â® ¯à¥ªà é ¥¬ § «¨¢ªã
|
||||
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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user