function 'buf2d_bit_blt_alpha' can take negative coordinates in the position of the copied buffer
update function 'buf2d_bit_blt_transp' git-svn-id: svn://kolibrios.org@2383 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
1 parent
e6242dd229
commit
7ff1f2a29d
2 files changed
+52
-15
No files matched your search
@@ -307,8 +307,9 @@ import_buf2d_lib:
|
||||
<p>22.12.10 - шчьхэхэю шь ЇєэъЎшш buf2d_cruve_bezier эр buf2d_curve_bezier.</p>
|
||||
<p>25.03.11 - фюсртыхэр ЇєэъЎш фы Ёшёютрэш Єюўъш buf2d_set_pixel.</p>
|
||||
<p>30.08.11 - фюсртыхэр ЇєэъЎш шчьхэхэш ЁрчьхЁют сєЇхЁр buf2d_resize.</p>
|
||||
<p>13.09.11 - юяЄшьшчшЁютрэр ЁрсюЄр ЇєэъЎшщ buf_filled_rect_by_size buf_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>20.02.12 - ЇєэъЎшш buf_filled_rect_by_size ш buf_rect_by_size ьюуєЄ яЁшэшьрЄ№ юЄЁшЎрЄхы№э√х ЁрчьхЁ√ фы яЁ ьюєуюы№эшъют, т ЇєэъЎшш buf2d_line уюЁшчюэЄры№эр ышэш ЁшёєхЄё эр 1 яшъёхы№ фышэхх (Ёрэ№°х эх фюЁшёют√трыю), эхъюЄюЁ√х ЇєэъЎшш ьюуєЄ ЁшёютрЄ№ т 8 сшЄэ√ї сєЇхЁрї.</p>
|
||||
</body>
|
||||
<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/>
|
||||
</body>
|
||||
</html>
|
||||
@@ -2111,6 +2111,19 @@ proc buf_bit_blt_transp, buf_destination:dword, coord_x:dword, coord_y:dword, bu
|
||||
jne .copy_end ;формат буфера не поодерживается
|
||||
mov ebx,buf2d_h ;ebx - высота основного буфера
|
||||
mov ecx,[coord_y]
|
||||
cmp ecx,0
|
||||
jge @f
|
||||
;если координата coord_y<0 (1-я настройка)
|
||||
add edx,ecx ;уменьшаем высоту копируемой картинки
|
||||
cmp edx,0
|
||||
jle .copy_end ;если копируемое изображение находится полностью над верхней границей буфера (coord_y<0 и |coord_y|>buf_source.h)
|
||||
neg ecx
|
||||
;inc ecx
|
||||
imul ecx,eax
|
||||
shl ecx,2 ;по 4 бита на пиксель
|
||||
add esi,ecx ;сдвигаем указатель с копируемыми данными, с учетом пропушеной части
|
||||
xor ecx,ecx ;обнуляем координату coord_y
|
||||
@@:
|
||||
cmp ecx,ebx
|
||||
jge .copy_end ;если координата 'y' больше высоты буфера
|
||||
add ecx,edx ;ecx - нижняя координата копируемой картинки
|
||||
@@ -2121,8 +2134,15 @@ proc buf_bit_blt_transp, buf_destination:dword, coord_x:dword, coord_y:dword, bu
|
||||
@@:
|
||||
mov ebx,buf2d_w
|
||||
mov ecx,ebx ;ecx используем для временных целей
|
||||
cmp [coord_y],0
|
||||
jg .end_otr_c_y
|
||||
;если координата coord_y<=0 (2-я настройка)
|
||||
mov ecx,[coord_x]
|
||||
jmp @f
|
||||
.end_otr_c_y:
|
||||
imul ecx,[coord_y]
|
||||
add ecx,[coord_x]
|
||||
@@:
|
||||
lea ecx,[ecx+ecx*2]
|
||||
add ecx,buf2d_data
|
||||
sub ebx,eax
|
||||
@@ -2226,7 +2246,7 @@ combine_colors_2:
|
||||
align 4
|
||||
proc buf_bit_blt_alpha, buf_destination:dword, coord_x:dword, coord_y:dword, buf_source:dword, color:dword
|
||||
locals
|
||||
right_bytes dd ?
|
||||
lost_bytes dd ? ;число потерянных байтов в строке копируемого изображеня (тех что не влазят в буфер)
|
||||
dest_w_bytes dd ? ;колличество байт в буфере приемнике по ширине - ширина вставляемой картинки
|
||||
endl
|
||||
pushad
|
||||
@@ -2234,7 +2254,7 @@ proc buf_bit_blt_alpha, buf_destination:dword, coord_x:dword, coord_y:dword, buf
|
||||
mov edi,[buf_source]
|
||||
cmp buf2d_bits,8
|
||||
jne .error1 ;формат буфера не поодерживается
|
||||
mov eax,buf2d_w
|
||||
mov eax,buf2d_w ;ширина копируемой картинки
|
||||
mov edx,buf2d_h ;высота копируемой картинки
|
||||
mov esi,buf2d_data ;данные копируемой картинки
|
||||
|
||||
@@ -2250,6 +2270,8 @@ proc buf_bit_blt_alpha, buf_destination:dword, coord_x:dword, coord_y:dword, buf
|
||||
jge @f
|
||||
;если координата coord_y<0 (1-я настройка)
|
||||
add edx,ecx ;уменьшаем высоту копируемой картинки
|
||||
cmp edx,0
|
||||
jle .copy_end ;если копируемое изображение находится полностью над верхней границей буфера (coord_y<0 и |coord_y|>buf_source.h)
|
||||
neg ecx
|
||||
;inc ecx
|
||||
imul ecx,eax
|
||||
@@ -2267,8 +2289,8 @@ proc buf_bit_blt_alpha, buf_destination:dword, coord_x:dword, coord_y:dword, buf
|
||||
mov ebx,buf2d_w
|
||||
mov ecx,[coord_y] ;ecx используем для временных целей
|
||||
cmp ecx,0
|
||||
jge .end_otr_c_y
|
||||
;если координата coord_y<0 (2-я настройка)
|
||||
jg .end_otr_c_y
|
||||
;если координата coord_y<=0 (2-я настройка)
|
||||
mov ecx,[coord_x]
|
||||
jmp @f
|
||||
.end_otr_c_y:
|
||||
@@ -2276,19 +2298,33 @@ proc buf_bit_blt_alpha, buf_destination:dword, coord_x:dword, coord_y:dword, buf
|
||||
add ecx,[coord_x]
|
||||
@@:
|
||||
lea ecx,[ecx+ecx*2]
|
||||
add ecx,buf2d_data
|
||||
sub ebx,eax
|
||||
add ecx,buf2d_data ;buf2d_data данные основного буфера
|
||||
sub ebx,eax ;ebx - ширина основного буфера минус ширина рисуемого буфера
|
||||
mov edi,ecx ;edi указатель на данные буфера, куда будет производится копирование
|
||||
|
||||
mov [right_bytes],0
|
||||
mov dword[lost_bytes],0
|
||||
mov ecx,[coord_x]
|
||||
cmp ecx,0
|
||||
jge @f
|
||||
neg ecx
|
||||
;inc ecx
|
||||
cmp eax,ecx ;eax - ширина копируемой картинки
|
||||
jle .copy_end ;если копируемое изображение находится полностью за левой границей буфера (coord_x<0 и |coord_x|>buf_source.w)
|
||||
add [lost_bytes],ecx
|
||||
sub eax,ecx ;укорачиваем копируемую строку
|
||||
add ebx,ecx ;удлинняем строку для сдвига главной картинки буфера
|
||||
add esi,ecx
|
||||
lea ecx,[ecx+ecx*2]
|
||||
add edi,ecx ;edi указатель на данные буфера, куда будет производится копирование
|
||||
xor ecx,ecx
|
||||
@@:
|
||||
cmp ecx,ebx
|
||||
jl @f
|
||||
jle @f
|
||||
sub ecx,ebx
|
||||
sub eax,ecx ;укорачиваем копируемую строку
|
||||
add ebx,ecx ;удлинняем строку для сдвига главной картинки буфера
|
||||
;ecx - число пикселей в 1-й строке картинки, которые вылазят за правую сторону
|
||||
mov [right_bytes],ecx
|
||||
add [lost_bytes],ecx
|
||||
@@:
|
||||
|
||||
lea ebx,[ebx+ebx*2] ;колличество байт в 1-й строке буфера минус число байт в 1-й строке копируемой картинки
|
||||
@@ -2296,7 +2332,7 @@ proc buf_bit_blt_alpha, buf_destination:dword, coord_x:dword, coord_y:dword, buf
|
||||
mov ebx,[color]
|
||||
|
||||
cld
|
||||
cmp [right_bytes],0
|
||||
cmp dword[lost_bytes],0
|
||||
jg .copy_1
|
||||
.copy_0: ;простое копирование
|
||||
mov ecx,eax
|
||||
@@ -2310,7 +2346,7 @@ proc buf_bit_blt_alpha, buf_destination:dword, coord_x:dword, coord_y:dword, buf
|
||||
cmp edx,0
|
||||
jg .copy_0
|
||||
jmp .copy_end
|
||||
.copy_1: ;не простое копирование (картинка вылазит за правую сторону)
|
||||
.copy_1: ;не простое копирование (картинка вылазит за левую и/или правую сторону)
|
||||
mov ecx,eax
|
||||
@@:
|
||||
call combine_colors_2
|
||||
@@ -2318,7 +2354,7 @@ proc buf_bit_blt_alpha, buf_destination:dword, coord_x:dword, coord_y:dword, buf
|
||||
inc esi
|
||||
loop @b
|
||||
add edi,[dest_w_bytes]
|
||||
add esi,[right_bytes] ;добавляем байты, которые вылазят за правую границу
|
||||
add esi,[lost_bytes] ;добавляем байты, которые вылазят за правую границу
|
||||
dec edx
|
||||
cmp edx,0
|
||||
jg .copy_1
|
||||
|
||||
Reference in new issue
Block a user