forked from KolibriOS/kolibrios
a17b90b7b3
git-svn-id: svn://kolibrios.org@307 a494cfbc-eb01-0410-851d-a64ba20cac60
94 lines
1.4 KiB
PHP
94 lines
1.4 KiB
PHP
;esi - screen size
|
|
;edi - pointer to image
|
|
csi_width equ [esi+2]
|
|
csi_height equ [esi]
|
|
csi_bitspp equ [esi+4]
|
|
csi_bytesps equ [esi+6]
|
|
|
|
|
|
copy_screen_to_image:
|
|
pusha
|
|
xor edx,edx
|
|
xor ecx,ecx
|
|
xor ebx,ebx
|
|
|
|
bt dword [use_rect.flags],1
|
|
jc copy_area
|
|
|
|
cmp csi_bitspp,word 24
|
|
je .next_str_24
|
|
|
|
.next_str_32:
|
|
push edx ebx
|
|
xor ebx,ebx
|
|
@@:
|
|
;push eax
|
|
mov eax,[gs:edx]
|
|
mov [edi+ecx],ax
|
|
shr eax,8
|
|
mov [edi+ecx+2],ah
|
|
;pop eax
|
|
add ecx,3
|
|
add edx,4;eax
|
|
inc bx
|
|
cmp bx,csi_width
|
|
jl @b
|
|
pop ebx edx
|
|
add edx,csi_bytesps
|
|
inc bx
|
|
cmp bx,csi_height
|
|
jl .next_str_32
|
|
popa
|
|
ret
|
|
|
|
.next_str_24:
|
|
push edx ebx
|
|
xor ebx,ebx
|
|
@@:
|
|
;push eax
|
|
mov eax,[gs:edx]
|
|
mov [edi+ecx],ax
|
|
shr eax,8
|
|
mov [edi+ecx+2],ah
|
|
;pop eax
|
|
add ecx,3
|
|
add edx,3;eax
|
|
inc bx
|
|
cmp bx,csi_width
|
|
jl @b
|
|
pop ebx edx
|
|
add edx,csi_bytesps
|
|
inc bx
|
|
cmp bx,csi_height
|
|
jl .next_str_24
|
|
popa
|
|
ret
|
|
|
|
copy_area:
|
|
mov eax,[scr.bytesps]
|
|
mov ebx,eax
|
|
movzx ecx,word [rect.top]
|
|
mul ecx
|
|
movzx ecx,word [rect.width]
|
|
shl ecx,2
|
|
sub ebx,ecx
|
|
movzx ecx,word [rect.left]
|
|
shl ecx,2
|
|
add eax,ecx
|
|
movzx ecx,word [rect.height]
|
|
mov edx,eax
|
|
.next_str:
|
|
movzx esi,word [rect.width]
|
|
.next_pixel:
|
|
mov eax,[gs:edx]
|
|
mov [edi],ax
|
|
shr eax,8
|
|
mov [edi+2],ah
|
|
add edx,4
|
|
add edi,3
|
|
dec esi
|
|
jnz .next_pixel
|
|
add edx,ebx
|
|
loop .next_str
|
|
popa
|
|
ret |