· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› Смешивание цветов

Посл.отвђт Сообщенiе


Дата: Май 18, 2004 14:55:42

У меня в программе есть процедура смещивания цветов "BlendPixels" Процедура ниже...
Смещивает два цвета с1 ф формате A4-R4-G4-B4
Смещивает два цвета с2 ф формате R5-G6-B5
Делаю по формуле c=(c1*k+c2(1-k))
В общем она самый большой тормоз в программе.
Может кто поможет ее улучшить.
Результаты тестирования проц. среднне за 64краз в di,si(что попало):
Athlon 2500+ XP Barton WIN98
51-54 такта

DD_BlendPixels proc
;di-Цвет1 (5-6-5)RGB с2
;si-Цвет2 (4-4-4-4)ARGB с1
push ecx
xor ecx,ecx
mov dx,si
shr dx,12
;dl=k;dh=1-k
cmovz ax,di
jz DD_BlendPixels_Exit1
mov dh,15
sub dh,dl
jnz short @F

mov ax,si
and al,00001111b
shl al,1
or cl,al

mov ax,si
and ax,0000000011110000b
shl ax,3
or cx,ax

mov ax,si
and ah,00001111b
shl ah,4
or ch,ah
jmp short DD_BlendPixels_Exit
@@:
;1-Цвет
mov ax,si
mov bx,di
and al,00001111b
and bl,00011111b
shl al,1
mul dl ;al-c1*k
shr ax,4
mov bh,al
mov al,bl
mul dh ;al-c2*(1-k)
shr ax,4
add al,bh

or cl,al

;2-Цвет
mov ax,si
mov bx,di
and al,11110000b
and bx,0000011111100000b
shr al,2
shr bx,5
mul dl ;al-c1*k
shr ax,4
mov bh,al
mov al,bl
mul dh ;al-c2*(1-k)
shr ax,4
add al,bh
shl ax,5

or cx,ax

;3-Цвет
mov ax,si
mov bx,di
and ah,00001111b
and bh,11111000b
shr ax,7
shr bx,11
mul dl ;al-c1*k
shr ax,4
mov bh,al
mov al,bl
mul dh ;al-c2*(1-k)
shr ax,4
add al,bh
shl ax,11
or cx,ax

DD_BlendPixels_Exit:
mov ax,cx
DD_BlendPixels_Exit1:
pop ecx
ret
DD_BlendPixels endp


Дата: Май 19, 2004 01:59:00 · Поправил: Black_mirror

Evg666
Извлекаем из с1 в 32x-разрядный регистр A4(в самые младшие биты, остальные биты обнуляем), а c1 и с2 переводим в формат Z6-G4-Z6-R4-Z7-B4-Z1 и Z6-G6-Z4-R5-Z6-B5 соответственно(Zx - нули). Домножаем регистр содержащий с1 на A4, а регистр содержащий с2 на A4 xor 15, и складываем. Получаем цвет в формате U2-G10-R9-U2-B9. Осталось только сдвинуть его на 4 вправо и поставить зеленую компоненту на место.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.047