update functions 'buf2d_img_hdiv2' and 'buf2d_img_wdiv2'
git-svn-id: svn://kolibrios.org@2920 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
1 parent
4fcb9b82ce
commit
aa35cd36bb
2 files changed
+223
-17
No files matched your search
@@ -54,6 +54,9 @@ table { font-size: 15px; }
|
||||
<ul>
|
||||
<li><a href="#f_init">lib_init</a></li>
|
||||
<li><a href="#f_b_create">buf2d_create</a></li>
|
||||
<li><a href="#f_b_create_f">buf2d_create_f_img</a></li>
|
||||
<li><a href="#f_b_hdiv2">buf2d_img_hdiv2</a></li>
|
||||
<li><a href="#f_b_wdiv2">buf2d_img_wdiv2</a></li>
|
||||
<li><a href="#f_c_color">buf2d_crop_color</a></li>
|
||||
<li><a href="#f_v_brush_c">buf2d_vox_brush_create</a></li>
|
||||
</ul>
|
||||
@@ -71,7 +74,7 @@ table { font-size: 15px; }
|
||||
┼ёЄ№ ЇєэъЎшш Ёшёютрэш ышэшщ, ъЁшт√ї ┴хч№х, яЁ ьюєуюы№эшъют, юъЁєцэюёЄхщ.
|
||||
╥ръцх хёЄ№ ЇєэъЎшш фы Ёшёютрэшщ тюъёхы№эющ уЁрЇшъш.</p>
|
||||
|
||||
<p>╧юёыхфэхх юсэютыхэшх сшсышюЄхъш 21.06.12.</p>
|
||||
<p>╧юёыхфэхх юсэютыхэшх сшсышюЄхъш 11.08.12.</p>
|
||||
|
||||
<h1><a name="format_buf">╘юЁьрЄ√ сєЇхЁют</a></h1>
|
||||
<p>╧юффхЁцштрхЄё 3 ЇюЁьрЄр сєЇхЁют.
|
||||
@@ -82,7 +85,7 @@ table { font-size: 15px; }
|
||||
<h4>24 сшЄ</h4>
|
||||
<p>─рээ√щ сєЇхЁ ёюфхЁцшЄ шчюсЁрцхэшх т ЇюЁьрЄх <b>rgb</b>. ╠юцхЄ т√тюфшЄё эр ¤ъЁрэ.</p>
|
||||
<h4>32 сшЄ</h4>
|
||||
<p>╤юфхЁцшЄ яЁючЁрўэюх шчюсЁрцхэшх т ЇюЁьрЄх <b>rgba</b>. ═р ¤ъЁрэ эх т√тюфшЄё . ╚ёяюы№чєхЄё фы эрыюцхэш шчюсЁрцхэшщ.</p>
|
||||
<p>╤юфхЁцшЄ яЁючЁрўэюх шчюсЁрцхэшх т ЇюЁьрЄх <b>rgba</b>. ═р ¤ъЁрэ эх т√тюфшЄё . ╚ёяюы№чєхЄё фы эрыюцхэш шчюсЁрцхэшщ. ┼ёыш <b>a=255</b> Єю яшъёхы№ яЁючЁрўэ√щ, хёыш <b>0</b> эх яЁючЁрўэ√щ.</p>
|
||||
|
||||
<h1><a name="fun">╘єэъЎшш</a></h1>
|
||||
|
||||
@@ -108,7 +111,7 @@ buf_0:
|
||||
<p>уфх buf_0 - ёЄЁєъЄєЁр сєЇхЁр.</p>
|
||||
<p>╧рЁрьхЄЁ√ фы ёючфрэш сєЇхЁр схЁєЄё шч ёЄЁєъЄєЁ√.</p>
|
||||
|
||||
<h4>buf2d_create_f_img</h4>
|
||||
<h4><a name="f_b_create_f">buf2d_create_f_img</a></h4>
|
||||
<p>╤ючфрхЄ сєЇхЁ эр юёэютх шчюсЁрцхэш т ЇюЁьрЄх <b>rgb</b>.</p>
|
||||
|
||||
<h4>buf2d_clear</h4>
|
||||
@@ -153,10 +156,10 @@ stdcall [buf2d_clear], edi, buf2d_color ;
|
||||
<pre>stdcall [buf2d_circle], buf_0, 25, 70, 15, 0xff0000</pre>
|
||||
<p>уфх buf_0 - ёЄЁєъЄєЁр сєЇхЁр т ъюЄюЁюь сєфхЄ ЁшёютрЄ№ё юъЁєцэюёЄ№; 25, 70 - ъююЁфшэрЄ√ ЎхэЄЁр; 15 - Ёрфшєё; 0xff0000 - ЎтхЄ.</p>
|
||||
|
||||
<h4>buf2d_img_hdiv2</h4>
|
||||
<h4><a name="f_b_hdiv2">buf2d_img_hdiv2</a></h4>
|
||||
<p>╤цшьрхЄ шчюсЁрцхэшх т сєЇхЁх яю т√ёюЄх т 2 Ёрчр, яЁш ¤Єюь ЁрчьхЁ ёрьюую сєЇхЁр эх єьхэ№°рхЄё .</p>
|
||||
|
||||
<h4>buf2d_img_wdiv2</h4>
|
||||
<h4><a name="f_b_wdiv2">buf2d_img_wdiv2</a></h4>
|
||||
<p>╤цшьрхЄ шчюсЁрцхэшх т сєЇхЁх яю °шЁшэх т 2 Ёрчр, яЁш ¤Єюь ЁрчьхЁ ёрьюую сєЇхЁр эх єьхэ№°рхЄё .</p>
|
||||
|
||||
<h4>buf2d_conv_24_to_8</h4>
|
||||
@@ -388,5 +391,6 @@ import_buf2d_lib:
|
||||
<p>23.02.12 - ЇєэъЎш buf2d_bit_blt_alpha ьюцхЄ яЁшэшьрЄ№ юЄЁшЎрЄхы№э√х ъююЁфшэрЄ√ т яючшЎшш ъюяшЁєхьюую сєЇхЁр, эхсюы№°шх фюЁрсюЄъш т buf2d_bit_blt_transp</p>
|
||||
<p>11.05.12 - фюсртыхэр ЇєэъЎш фы тч Єш ЎтхЄр Єюўъш buf2d_get_pixel, фюЁрсюЄъш т buf2d_set_pixel.</p>
|
||||
<p>12.06.12 - фюсртыхэ√ ЇєэъЎшш фы Ёшёютрэш тюъёхы№эющ уЁрЇшъш.</p>
|
||||
<p>11.08.12 - ЇєэъЎшш фы ёцрЄш шчюсЁрцхэшщ buf2d_img_hdiv2 ш buf2d_img_wdiv2 ЁрсюЄр■Є ё 32 сшЄэ√ьш сєЇхЁрьш.</p>
|
||||
</body>
|
||||
</html>
|
||||
@@ -249,7 +249,7 @@ proc draw_pixel_transp, t_prop:dword, m_prop:dword
|
||||
mov byte[transp_32+3],al ;прозрачность рисуемой точки
|
||||
mov esi,dword transp_32 ;указатель на цвет рисуемой точки
|
||||
|
||||
call combine_colors
|
||||
call combine_colors_0
|
||||
pop esi edi edx ebx eax
|
||||
@@:
|
||||
ret
|
||||
@@ -1754,6 +1754,13 @@ proc buf_img_wdiv2, buf_struc:dword
|
||||
imul ecx,eax
|
||||
stdcall img_rgb24_wdiv2, buf2d_data,ecx
|
||||
.end_draw_24:
|
||||
cmp buf2d_bits,32
|
||||
jne .end_draw_32
|
||||
mov eax,buf2d_w
|
||||
mov ecx,buf2d_h
|
||||
imul ecx,eax
|
||||
stdcall img_rgb32_wdiv2, buf2d_data,ecx
|
||||
.end_draw_32:
|
||||
popad
|
||||
ret
|
||||
endp
|
||||
@@ -1763,7 +1770,6 @@ endp
|
||||
;size - count img pixels (size img data / 3(rgb) )
|
||||
align 4
|
||||
proc img_rgb24_wdiv2 data_rgb:dword, size:dword
|
||||
;push eax ebx ecx edx
|
||||
mov eax,dword[data_rgb]
|
||||
mov ecx,dword[size] ;ecx = size
|
||||
lea ecx,[ecx+ecx*2]
|
||||
@@ -1800,10 +1806,45 @@ proc img_rgb24_wdiv2 data_rgb:dword, size:dword
|
||||
add eax,3
|
||||
add ebx,6
|
||||
loop @b
|
||||
;pop edx ecx ebx eax
|
||||
ret
|
||||
endp
|
||||
|
||||
;input:
|
||||
;data_rgb - pointer to rgb data
|
||||
;size - count img pixels (size img data / 3(rgb) )
|
||||
align 4
|
||||
proc img_rgb32_wdiv2 data_rgb:dword, size:dword
|
||||
mov eax,dword[data_rgb]
|
||||
|
||||
mov eax,dword[data_rgb]
|
||||
mov ebx,eax
|
||||
add ebx,4
|
||||
mov ecx,dword[size] ;ecx = size
|
||||
shr ecx,1
|
||||
@@: ;смешивание цветов пикселей
|
||||
call combine_colors_1
|
||||
mov [eax],edx
|
||||
add eax,8 ;=2*4
|
||||
add ebx,8
|
||||
loop @b
|
||||
|
||||
mov eax,dword[data_rgb]
|
||||
add eax,4
|
||||
mov ebx,eax
|
||||
add ebx,4
|
||||
mov ecx,dword[size] ;ecx = size
|
||||
shr ecx,1
|
||||
dec ecx ;лишний пиксель
|
||||
@@: ;поджатие пикселей
|
||||
mov edx,dword[ebx]
|
||||
mov dword[eax],edx
|
||||
|
||||
add eax,4
|
||||
add ebx,8
|
||||
loop @b
|
||||
ret
|
||||
endp
|
||||
|
||||
align 4
|
||||
proc buf_img_hdiv2, buf_struc:dword
|
||||
pushad
|
||||
@@ -1815,6 +1856,14 @@ proc buf_img_hdiv2, buf_struc:dword
|
||||
imul ecx,eax
|
||||
stdcall img_rgb24_hdiv2, buf2d_data,ecx,eax
|
||||
.end_draw_24:
|
||||
cmp buf2d_bits,32
|
||||
jne .end_draw_32
|
||||
mov eax,buf2d_w
|
||||
mov ecx,buf2d_h
|
||||
imul ecx,eax
|
||||
shl eax,2
|
||||
stdcall img_rgb32_hdiv2, buf2d_data,ecx,eax
|
||||
.end_draw_32:
|
||||
popad
|
||||
ret
|
||||
endp
|
||||
@@ -1825,7 +1874,6 @@ endp
|
||||
;size_w - width img in pixels
|
||||
align 4
|
||||
proc img_rgb24_hdiv2, data_rgb:dword, size:dword, size_w:dword
|
||||
;pushad
|
||||
|
||||
mov eax,dword[data_rgb] ;eax =
|
||||
mov ecx,dword[size] ;ecx = size
|
||||
@@ -1837,8 +1885,8 @@ proc img_rgb24_hdiv2, data_rgb:dword, size:dword, size_w:dword
|
||||
loop @b
|
||||
|
||||
mov eax,dword[data_rgb] ;eax =
|
||||
mov edi,dword[size_w]
|
||||
lea esi,[edi+edi*2] ;esi = width*3(rgb)
|
||||
mov esi,dword[size_w]
|
||||
lea esi,[esi+esi*2] ;esi = width*3(rgb)
|
||||
mov ebx,esi
|
||||
add ebx,eax
|
||||
mov ecx,dword[size] ;ecx = size
|
||||
@@ -1864,8 +1912,8 @@ proc img_rgb24_hdiv2, data_rgb:dword, size:dword, size_w:dword
|
||||
|
||||
mov eax,dword[data_rgb] ;eax =
|
||||
add eax,esi ;esi = width*3(rgb)
|
||||
mov ebx,esi
|
||||
add ebx,eax
|
||||
mov ebx,eax
|
||||
add ebx,esi
|
||||
mov ecx,dword[size] ;ecx = size
|
||||
shr ecx,1
|
||||
sub ecx,dword[size_w] ;лишняя строка пикселей
|
||||
@@ -1886,10 +1934,164 @@ proc img_rgb24_hdiv2, data_rgb:dword, size:dword, size_w:dword
|
||||
.old_line_2:
|
||||
loop @b
|
||||
|
||||
;popad
|
||||
ret
|
||||
endp
|
||||
|
||||
;input:
|
||||
;data_rgb - pointer to rgb data
|
||||
;size - count img pixels (size img data / 3(rgb) )
|
||||
;size_w_b - width img in bytes
|
||||
align 4
|
||||
proc img_rgb32_hdiv2, data_rgb:dword, size:dword, size_w_b:dword
|
||||
|
||||
mov eax,dword[data_rgb] ;eax =
|
||||
mov ebx,dword[size_w_b]
|
||||
add ebx,eax
|
||||
mov ecx,dword[size] ;ecx = size
|
||||
shr ecx,1
|
||||
xor edi,edi
|
||||
@@: ;смешивание цветов пикселей
|
||||
call combine_colors_1
|
||||
mov dword[eax],edx
|
||||
|
||||
add eax,4
|
||||
add ebx,4
|
||||
add edi,4
|
||||
cmp edi,dword[size_w_b]
|
||||
jl .old_line
|
||||
add eax,dword[size_w_b]
|
||||
add ebx,dword[size_w_b]
|
||||
xor edi,edi
|
||||
.old_line:
|
||||
loop @b
|
||||
|
||||
|
||||
mov eax,dword[data_rgb] ;eax =
|
||||
mov ebx,dword[size_w_b]
|
||||
add eax,ebx
|
||||
add ebx,eax
|
||||
mov ecx,dword[size] ;ecx = size
|
||||
shl ecx,1
|
||||
sub ecx,dword[size_w_b] ;лишняя строка пикселей
|
||||
shr ecx,2
|
||||
xor edi,edi
|
||||
@@: ;поджатие пикселей
|
||||
mov edx,dword[ebx] ;копируем цвет нижнего пикселя
|
||||
mov dword[eax],edx
|
||||
|
||||
add eax,4
|
||||
add ebx,4
|
||||
add edi,4
|
||||
cmp edi,dword[size_w_b]
|
||||
jl .old_line_2
|
||||
add ebx,dword[size_w_b]
|
||||
xor edi,edi
|
||||
.old_line_2:
|
||||
loop @b
|
||||
|
||||
ret
|
||||
endp
|
||||
|
||||
;input:
|
||||
; eax - указатель на 32-битный цвет
|
||||
; ebx - указатель на 32-битный цвет
|
||||
;output:
|
||||
; edx - 32-битный цвет смешанный с учетом прозрачности
|
||||
;destroy:
|
||||
; esi
|
||||
align 4
|
||||
proc combine_colors_1 uses ecx edi
|
||||
locals
|
||||
c_blye dd ?
|
||||
c_green dd ?
|
||||
c_red dd ?
|
||||
endl
|
||||
movzx edi,byte[eax+3]
|
||||
cmp edi,255
|
||||
je .c0z
|
||||
movzx esi,byte[ebx+3]
|
||||
cmp esi,255
|
||||
je .c1z
|
||||
|
||||
;переворачиваем значения прозрачностей
|
||||
neg edi
|
||||
inc edi
|
||||
add edi,255
|
||||
neg esi
|
||||
inc esi
|
||||
add esi,255
|
||||
|
||||
movzx ecx,byte[eax]
|
||||
imul ecx,edi
|
||||
mov [c_blye],ecx
|
||||
movzx ecx,byte[ebx]
|
||||
imul ecx,esi
|
||||
add [c_blye],ecx
|
||||
|
||||
movzx ecx,byte[eax+1]
|
||||
imul ecx,edi
|
||||
mov [c_green],ecx
|
||||
movzx ecx,byte[ebx+1]
|
||||
imul ecx,esi
|
||||
add [c_green],ecx
|
||||
|
||||
movzx ecx,byte[eax+2]
|
||||
imul ecx,edi
|
||||
mov [c_red],ecx
|
||||
movzx ecx,byte[ebx+2]
|
||||
imul ecx,esi
|
||||
add [c_red],ecx
|
||||
|
||||
push eax ebx
|
||||
xor ebx,ebx
|
||||
mov eax,[c_red]
|
||||
xor edx,edx
|
||||
mov ecx,edi
|
||||
add ecx,esi
|
||||
div ecx
|
||||
mov bl,al
|
||||
shl ebx,16
|
||||
mov eax,[c_green]
|
||||
xor edx,edx
|
||||
div ecx
|
||||
mov bh,al
|
||||
mov eax,[c_blye]
|
||||
xor edx,edx
|
||||
div ecx
|
||||
mov bl,al
|
||||
|
||||
shr ecx,1
|
||||
;переворачиваем значения прозрачности
|
||||
neg ecx
|
||||
inc ecx
|
||||
add ecx,255
|
||||
|
||||
shl ecx,24
|
||||
add ebx,ecx
|
||||
mov edx,ebx
|
||||
pop ebx eax
|
||||
|
||||
jmp .end_f
|
||||
.c0z: ;если цвет в eax прозрачный
|
||||
mov edx,dword[ebx]
|
||||
movzx edi,byte[ebx+3]
|
||||
jmp @f
|
||||
.c1z: ;если цвет в ebx прозрачный
|
||||
mov edx,dword[eax]
|
||||
@@:
|
||||
add edi,255 ;делаем цвет на половину прозрачным
|
||||
shr edi,1
|
||||
cmp edi,255
|
||||
jl @f
|
||||
mov edi,255 ;максимальная прозрачность не более 255
|
||||
@@:
|
||||
shl edi,24
|
||||
and edx,0xffffff ;снимаем старую прозрачность
|
||||
add edx,edi
|
||||
.end_f:
|
||||
ret
|
||||
endp
|
||||
|
||||
;преобразование буфера из 24-битного в 8-битный
|
||||
; spectr - определяет какой спектр брать при преобразовании 0-синий, 1-зеленый, 2-красный
|
||||
align 4
|
||||
@@ -2185,7 +2387,7 @@ endp
|
||||
;output:
|
||||
; [edi] = combine color
|
||||
align 4
|
||||
combine_colors:
|
||||
combine_colors_0:
|
||||
push ax bx cx dx
|
||||
mov bx,0x00ff ;---get transparent---
|
||||
movzx cx,byte[esi+3] ;pro
|
||||
@@ -2293,7 +2495,7 @@ proc buf_bit_blt_transp, buf_destination:dword, coord_x:dword, coord_y:dword, bu
|
||||
.copy_0: ;простое копирование
|
||||
mov ecx,eax
|
||||
@@:
|
||||
call combine_colors
|
||||
call combine_colors_0
|
||||
add edi,3
|
||||
add esi,4
|
||||
loop @b
|
||||
@@ -2305,7 +2507,7 @@ proc buf_bit_blt_transp, buf_destination:dword, coord_x:dword, coord_y:dword, bu
|
||||
.copy_1: ;не простое копирование (картинка вылазит за правую сторону)
|
||||
mov ecx,eax
|
||||
@@:
|
||||
call combine_colors
|
||||
call combine_colors_0
|
||||
add edi,3
|
||||
add esi,4
|
||||
loop @b
|
||||
|
||||
Reference in new issue
Block a user