From 1d27ab3331d239f730853ac76ee09ecf6e452b8f Mon Sep 17 00:00:00 2001 From: IgorA Date: Tue, 2 Nov 2010 19:34:57 +0000 Subject: [PATCH] new function 'buf2d_flood_fill' git-svn-id: svn://kolibrios.org@1684 a494cfbc-eb01-0410-851d-a64ba20cac60 --- .../develop/libraries/buf2d/trunk/about.htm | 16 +- .../develop/libraries/buf2d/trunk/buf2d.asm | 184 +++++++++++++++++- 2 files changed, 192 insertions(+), 8 deletions(-) diff --git a/programs/develop/libraries/buf2d/trunk/about.htm b/programs/develop/libraries/buf2d/trunk/about.htm index 221e057cd5..fbccd17939 100644 --- a/programs/develop/libraries/buf2d/trunk/about.htm +++ b/programs/develop/libraries/buf2d/trunk/about.htm @@ -62,7 +62,7 @@ table { font-size: 15px; } С ее помощью можно создавать буфера с изображениями в памяти, и при необходимости выводить их на экран. Изображения можно накладывать одно на другое, поддерживается работа с прозрачными изображениями, есть функция рисования лини пока на этом все.

-

Последнее обновление библиотеки 07.10.10.

+

Последнее обновление библиотеки 02.11.10.

Форматы буферов

Поддерживается 3 формата буферов. @@ -189,6 +189,15 @@ stdcall [buf2d_convert_text_matrix], buf_1

buf2d_offset_h

Сдвиг изображения в буфере по высоте вверх или вниз.

+

buf2d_flood_fill

+

Функция для рекурсивной заливки выбранным цветом. Имееться два варианта заливки. Пример:

+
stdcall [buf2d_flood_fill], buf_0, 100,200, 0, 0xff,0xff0000
+

где buf_0 - структура буфера; + 100,200 - координаты точки, с которой начнется заливка; + 0 - параметр, определяет алгоритм заливки (может быть 0 или 1); + 0xff - цвет заливки;

+ 0xff0000 - зависит от значения 4-го параметра, 1) если 0 - цвет до которого будет заливаться область; 2) если 1 - цвет области которая будет заливатся;

+

Константы

BUF2D_OPT_CROP_TOP equ 1

Константа для функции buf2d_crop_color, обозначает обрезку буфера сверху

@@ -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 + sz_buf2d_offset_h db 'buf2d_offset_h',0 + sz_buf2d_flood_fill db 'buf2d_flood_fill',0

История

02.07.10 - самая первая версия библиотеки, 2 примера использования.

@@ -262,5 +273,6 @@ import_buf2d_lib:

04.10.10 - добавлена функция buf2d_filled_rect_by_size, доработана функция buf_bit_blt_alpha.

07.10.10 - доработана функция buf_bit_blt (при попытке нарисовать изображение за пределами правого края буфера приложение вызвавшее функцию падало).

11.10.10 - исправлено задание цветов в некоторых функциях, красный и синий цвета поменял местами. Теперь цвета совпадают с сисемными функциями.

+

02.11.10 - добавлена функция buf2d_flood_fill.

\ No newline at end of file diff --git a/programs/develop/libraries/buf2d/trunk/buf2d.asm b/programs/develop/libraries/buf2d/trunk/buf2d.asm index ad9c8dba99..428f6159f8 100644 --- a/programs/develop/libraries/buf2d/trunk/buf2d.asm +++ b/programs/develop/libraries/buf2d/trunk/buf2d.asm @@ -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