forked from KolibriOS/kolibrios
'buf2d.obj' add new function 'buf2d_get_pixel'
git-svn-id: svn://kolibrios.org@2658 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
72810d8d6a
commit
a992134c24
@ -62,7 +62,7 @@ table { font-size: 15px; }
|
|||||||
С ее помощью можно создавать буфера с изображениями в памяти, и при необходимости выводить их на экран.
|
С ее помощью можно создавать буфера с изображениями в памяти, и при необходимости выводить их на экран.
|
||||||
Изображения можно накладывать одно на другое, поддерживается работа с прозрачными изображениями, есть функция рисования лини пока на этом все.</p>
|
Изображения можно накладывать одно на другое, поддерживается работа с прозрачными изображениями, есть функция рисования лини пока на этом все.</p>
|
||||||
|
|
||||||
<p>Последнее обновление библиотеки 22.09.11.</p>
|
<p>Последнее обновление библиотеки 11.05.12.</p>
|
||||||
|
|
||||||
<h1><a name="f_buf">Форматы буферов</a></h1>
|
<h1><a name="f_buf">Форматы буферов</a></h1>
|
||||||
<p>Поддерживается 3 формата буферов.
|
<p>Поддерживается 3 формата буферов.
|
||||||
@ -216,11 +216,18 @@ stdcall [buf2d_convert_text_matrix], buf_1</pre>
|
|||||||
0xff0000 - зависит от значения 4-го параметра, 1) если 0 - цвет до которого будет заливаться область; 2) если 1 - цвет области которая будет заливатся;</p>
|
0xff0000 - зависит от значения 4-го параметра, 1) если 0 - цвет до которого будет заливаться область; 2) если 1 - цвет области которая будет заливатся;</p>
|
||||||
|
|
||||||
<h4>buf2d_set_pixel</h4>
|
<h4>buf2d_set_pixel</h4>
|
||||||
<p>Функция ставит точку, принимает координаты и цвет. Работает на 24-битных буферах.</p>
|
<p>Функция ставит точку, принимает координаты и цвет.</p>
|
||||||
<pre>stdcall [buf2d_set_pixel], buf_0, 100,150, 0xff0000</pre>
|
<pre>stdcall [buf2d_set_pixel], buf_0, 100,150, 0xff0000</pre>
|
||||||
<p>где buf_0 - структура буфера;
|
<p>где buf_0 - структура буфера;</p>
|
||||||
100,150 - координаты точки;
|
<p>100,150 - координаты точки;</p>
|
||||||
0xff0000 - цвет точки.</p>
|
<p>0xff0000 - цвет точки.</p>
|
||||||
|
|
||||||
|
<h4>buf2d_get_pixel</h4>
|
||||||
|
<p>Функция записывает цвет точки в регистр eax, принимает координаты.</p>
|
||||||
|
<pre>stdcall [buf2d_get_pixel], buf_0, 100,150</pre>
|
||||||
|
<p>где buf_0 - структура буфера;</p>
|
||||||
|
<p>100,150 - координаты точки;</p>
|
||||||
|
<p>eax - цвет точки (для 8 и 24 битных буферов не используемые старшие биты в eax равны 0) или значение -1 в случае ошибки.</p>
|
||||||
|
|
||||||
<h1><a name="const">Константы</a></h1>
|
<h1><a name="const">Константы</a></h1>
|
||||||
<h4>BUF2D_OPT_CROP_TOP equ 1</h4>
|
<h4>BUF2D_OPT_CROP_TOP equ 1</h4>
|
||||||
@ -262,6 +269,7 @@ import_buf2d_lib:
|
|||||||
buf2d_offset_h dd sz_buf2d_offset_h
|
buf2d_offset_h dd sz_buf2d_offset_h
|
||||||
buf2d_flood_fill dd sz_buf2d_flood_fill
|
buf2d_flood_fill dd sz_buf2d_flood_fill
|
||||||
buf2d_set_pixel dd sz_buf2d_set_pixel
|
buf2d_set_pixel dd sz_buf2d_set_pixel
|
||||||
|
buf2d_get_pixel dd sz_buf2d_get_pixel
|
||||||
|
|
||||||
dd 0,0
|
dd 0,0
|
||||||
sz_lib_init db 'lib_init',0
|
sz_lib_init db 'lib_init',0
|
||||||
@ -289,7 +297,8 @@ import_buf2d_lib:
|
|||||||
sz_buf2d_crop_color db 'buf2d_crop_color',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
|
sz_buf2d_flood_fill db 'buf2d_flood_fill',0
|
||||||
sz_buf2d_set_pixel db 'buf2d_set_pixel',0</pre>
|
sz_buf2d_set_pixel db 'buf2d_set_pixel',0
|
||||||
|
sz_buf2d_get_pixel db 'buf2d_get_pixel',0</pre>
|
||||||
|
|
||||||
<h1><a name="hist">История</a></h1>
|
<h1><a name="hist">История</a></h1>
|
||||||
<p>02.07.10 - самая первая версия библиотеки, 2 примера использования.</p>
|
<p>02.07.10 - самая первая версия библиотеки, 2 примера использования.</p>
|
||||||
@ -310,6 +319,7 @@ import_buf2d_lib:
|
|||||||
<p>13.09.11 - оптимизирована работа функций buf2d_filled_rect_by_size buf2d_rect_by_size, добавлены примеры использования библиотеки.</p>
|
<p>13.09.11 - оптимизирована работа функций buf2d_filled_rect_by_size buf2d_rect_by_size, добавлены примеры использования библиотеки.</p>
|
||||||
<p>22.09.11 - добавлена функция buf2d_line_sm для рисования сглаженной линии.</p>
|
<p>22.09.11 - добавлена функция buf2d_line_sm для рисования сглаженной линии.</p>
|
||||||
<p>20.02.12 - функции buf2d_filled_rect_by_size и buf2d_rect_by_size могут принимать отрицательные размеры для прямоугольников, в функции buf2d_line горизонтальная линия рисуется на 1 пиксель длинее (раньше не дорисовывало), некоторые функции могут рисовать в 8 битных буферах.</p>
|
<p>20.02.12 - функции buf2d_filled_rect_by_size и buf2d_rect_by_size могут принимать отрицательные размеры для прямоугольников, в функции buf2d_line горизонтальная линия рисуется на 1 пиксель длинее (раньше не дорисовывало), некоторые функции могут рисовать в 8 битных буферах.</p>
|
||||||
<p>23.02.12 - функция buf2d_bit_blt_alpha может принимать отрицательные координаты в позиции копируемого буфера, небольшие доработки в buf2d_bit_blt_transp<p/>
|
<p>23.02.12 - функция buf2d_bit_blt_alpha может принимать отрицательные координаты в позиции копируемого буфера, небольшие доработки в buf2d_bit_blt_transp</p>
|
||||||
|
<p>11.05.12 - добавлена функция для взятия цвета точки buf2d_get_pixel, доработки в buf2d_set_pixel.</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
@ -84,6 +84,8 @@ draw_pixel:
|
|||||||
add esi,ebx ;size_x*y+x
|
add esi,ebx ;size_x*y+x
|
||||||
cmp buf2d_bits,8
|
cmp buf2d_bits,8
|
||||||
je .beg8
|
je .beg8
|
||||||
|
cmp buf2d_bits,32
|
||||||
|
je .beg32
|
||||||
lea esi,[esi+esi*2] ;(size_x*y+x)*3
|
lea esi,[esi+esi*2] ;(size_x*y+x)*3
|
||||||
add esi,buf2d_data ;ptr+(size_x*y+x)*3
|
add esi,buf2d_data ;ptr+(size_x*y+x)*3
|
||||||
mov word[esi],dx ;copy pixel color
|
mov word[esi],dx ;copy pixel color
|
||||||
@ -94,11 +96,46 @@ draw_pixel:
|
|||||||
.beg8: ;à¨á®¢ ¨¥ â®çª¨ ¢ 8 ¡¨â®¬ ¡ãä¥à¥
|
.beg8: ;à¨á®¢ ¨¥ â®çª¨ ¢ 8 ¡¨â®¬ ¡ãä¥à¥
|
||||||
add esi,buf2d_data ;ptr+(size_x*y+x)
|
add esi,buf2d_data ;ptr+(size_x*y+x)
|
||||||
mov byte[esi],dl
|
mov byte[esi],dl
|
||||||
|
jmp .end_draw
|
||||||
|
.beg32: ;à¨á®¢ ¨¥ â®çª¨ ¢ 32 ¡¨â®¬ ¡ãä¥à¥
|
||||||
|
shl esi,2
|
||||||
|
add esi,buf2d_data ;ptr+(size_x*y+x)
|
||||||
|
mov dword[esi],edx
|
||||||
.end_draw:
|
.end_draw:
|
||||||
pop esi
|
pop esi
|
||||||
@@:
|
@@:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
;input:
|
||||||
|
; ebx = coord x
|
||||||
|
; ecx = coord y
|
||||||
|
; edi = pointer to buffer struct
|
||||||
|
;output:
|
||||||
|
; eax = 梥â â®çª¨
|
||||||
|
; ¢ á«ãç ¥ ®è¨¡ª¨ eax = 0xffffffff
|
||||||
|
align 4
|
||||||
|
get_pixel_8:
|
||||||
|
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
|
||||||
|
add esi,buf2d_data ;ptr+(size_x*y+x)
|
||||||
|
|
||||||
|
movzx eax,byte[esi] ;copy pixel color
|
||||||
|
pop esi
|
||||||
|
@@:
|
||||||
|
ret
|
||||||
|
|
||||||
;input:
|
;input:
|
||||||
; ebx = coord x
|
; ebx = coord x
|
||||||
; ecx = coord y
|
; ecx = coord y
|
||||||
@ -134,6 +171,37 @@ get_pixel_24:
|
|||||||
@@:
|
@@:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
;input:
|
||||||
|
; ebx = coord x
|
||||||
|
; ecx = coord y
|
||||||
|
; edi = pointer to buffer struct
|
||||||
|
;output:
|
||||||
|
; eax = 梥â â®çª¨
|
||||||
|
; ¢ á«ãç ¥ ®è¨¡ª¨ eax = 0xffffffff
|
||||||
|
align 4
|
||||||
|
get_pixel_32:
|
||||||
|
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
|
||||||
|
shl esi,2
|
||||||
|
add esi,buf2d_data ;ptr+(size_x*y+x)*4
|
||||||
|
|
||||||
|
mov eax,dword[esi] ;copy pixel color
|
||||||
|
pop esi
|
||||||
|
@@:
|
||||||
|
ret
|
||||||
|
|
||||||
;input:
|
;input:
|
||||||
; ebx = coord x
|
; ebx = coord x
|
||||||
; ecx = coord y
|
; ecx = coord y
|
||||||
@ -1635,21 +1703,40 @@ buf_flood_fill_recurs_1:
|
|||||||
|
|
||||||
;äãªæ¨ï ¤«ï à¨á®¢ ¨ï â®çª¨
|
;äãªæ¨ï ¤«ï à¨á®¢ ¨ï â®çª¨
|
||||||
align 4
|
align 4
|
||||||
proc buf_set_pixel, buf_struc:dword, coord_x:dword, coord_y:dword, color:dword
|
proc buf_set_pixel uses ebx ecx edx edi, buf_struc:dword, coord_x:dword, coord_y:dword, color:dword
|
||||||
pushad
|
mov edi,dword[buf_struc]
|
||||||
mov edi,[buf_struc]
|
mov ebx,dword[coord_x]
|
||||||
cmp buf2d_bits,8
|
mov ecx,dword[coord_y]
|
||||||
je @f
|
mov edx,dword[color]
|
||||||
cmp buf2d_bits,24
|
call draw_pixel
|
||||||
je @f
|
ret
|
||||||
jmp .end24
|
endp
|
||||||
@@:
|
|
||||||
mov ebx,dword[coord_x]
|
;output:
|
||||||
mov ecx,dword[coord_y]
|
; eax = 梥â â®çª¨
|
||||||
mov edx,dword[color]
|
; ¢ á«ãç ¥ ®è¨¡ª¨ eax = 0xffffffff
|
||||||
call draw_pixel
|
align 4
|
||||||
.end24:
|
proc buf_get_pixel uses ebx ecx edi, buf_struc:dword, coord_x:dword, coord_y:dword
|
||||||
popad
|
mov edi,dword[buf_struc]
|
||||||
|
mov ebx,[coord_x]
|
||||||
|
mov ecx,[coord_y]
|
||||||
|
|
||||||
|
cmp buf2d_bits,8
|
||||||
|
jne @f
|
||||||
|
call get_pixel_8
|
||||||
|
jmp .end_fun
|
||||||
|
@@:
|
||||||
|
cmp buf2d_bits,24
|
||||||
|
jne @f
|
||||||
|
call get_pixel_24
|
||||||
|
jmp .end_fun
|
||||||
|
@@:
|
||||||
|
cmp buf2d_bits,32
|
||||||
|
jne @f
|
||||||
|
call get_pixel_32
|
||||||
|
;jmp .end_fun
|
||||||
|
@@:
|
||||||
|
.end_fun:
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
@ -2203,7 +2290,7 @@ proc buf_bit_blt_transp, buf_destination:dword, coord_x:dword, coord_y:dword, bu
|
|||||||
@@:
|
@@:
|
||||||
|
|
||||||
lea ebx,[ebx+ebx*2] ;ª®««¨ç¥á⢮ ¡ ©â ¢ 1-© áâப¥ ¡ãä¥à ¬¨ãá ç¨á«® ¡ ©â ¢ 1-© áâப¥ ª®¯¨à㥬®© ª à⨪¨
|
lea ebx,[ebx+ebx*2] ;ª®««¨ç¥á⢮ ¡ ©â ¢ 1-© áâப¥ ¡ãä¥à ¬¨ãá ç¨á«® ¡ ©â ¢ 1-© áâப¥ ª®¯¨à㥬®© ª à⨪¨
|
||||||
;g;
|
|
||||||
cld
|
cld
|
||||||
cmp [right_bytes],0
|
cmp [right_bytes],0
|
||||||
jg .copy_1
|
jg .copy_1
|
||||||
@ -2751,6 +2838,7 @@ EXPORTS:
|
|||||||
dd sz_buf2d_offset_h, buf_offset_h
|
dd sz_buf2d_offset_h, buf_offset_h
|
||||||
dd sz_buf2d_flood_fill, buf_flood_fill
|
dd sz_buf2d_flood_fill, buf_flood_fill
|
||||||
dd sz_buf2d_set_pixel, buf_set_pixel
|
dd sz_buf2d_set_pixel, buf_set_pixel
|
||||||
|
dd sz_buf2d_get_pixel, buf_get_pixel
|
||||||
dd 0,0
|
dd 0,0
|
||||||
sz_lib_init db 'lib_init',0
|
sz_lib_init db 'lib_init',0
|
||||||
sz_buf2d_create db 'buf2d_create',0
|
sz_buf2d_create db 'buf2d_create',0
|
||||||
@ -2778,4 +2866,4 @@ EXPORTS:
|
|||||||
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
|
sz_buf2d_flood_fill db 'buf2d_flood_fill',0
|
||||||
sz_buf2d_set_pixel db 'buf2d_set_pixel',0
|
sz_buf2d_set_pixel db 'buf2d_set_pixel',0
|
||||||
|
sz_buf2d_get_pixel db 'buf2d_get_pixel',0
|
||||||
|
Loading…
Reference in New Issue
Block a user