Вниз
Скачать: CL | DM;

Здесь кто-нить знает ассемблер???   Найти похожие ветки 

 
F1 ©   (2003-01-05 12:13) [0]

Короче, есть у меня процедурка, смешивающая битмапы:
Там по формуле
Colorres:=Alpha*(Color1-Color2)/256+Color2;
Где Alpha- "коэф. прозрачности" 0..255
Так вот проблема с sub при отриц. результате надо прыгать, можно ли это обойтить?
Буду благодарен за любую помощь!

procedure MixBitmap(B1,B2,B3:TBitmap;a:Byte);
var
l:DWORD;
p1,p2,p3:^Byte;
//А в ней ассемблерная процедурка, для скорости
//Я в ассемблере не силен, помогите ее соптимизировать!!!
procedure Mix;assembler;
Label Loop,Exit,m1,m2;
asm
pushad
mov esi,p1
mov edi,p2
mov edx,p3
mov ecx,l
mov bh,a
loop:
mov al,[esi]
mov bl,[edi]
sub al,bl //(p1-p2)
//Как здеся не прыгать, но чтоб результат был правильный?
jnc m1 //Если разность не отриц. то на m1
neg al //Меняю знак рез.
mul bh
sub bl,ah //Вместо сложения вычитаю
mov [edx],bl
jmp m2 //и уходим на m2
m1:
mul bh
add ah,bl
mov [edx],ah
m2:
dec ecx
jecxz Exit //Выход из цикла
inc esi
inc edi
inc edx
jmp loop //цикл
Exit:
popad
end;

var
h,w,bpp:Integer;

begin
//Это всякие проверки, можно не читать
if (B1=nil)or(B2=nil)or(b3=nil) then Exit;
w:=B1.Width;
if (B2.Width<>w)or(B3.Width<>w) then Exit;
h:=B1.Height;
if (B2.Height<>h)or(B3.Height<>h) then Exit;
if (B2.PixelFormat<>B1.PixelFormat)or(B3.PixelFormat<>B1.PixelFormat) then Exit;
if a=0 then
begin
B3.Assign(B2);
Exit;
end;
if a=255 then
begin
B3.Assign(B1);
Exit;
end;
case B1.PixelFormat of
pf24bit:bpp:=3;
pf32bit:bpp:=4;
else Exit;
end;
//А вот и сам Mix!!!!!!!!!!!!!!!!!!!!!!!!
p1:=B1.ScanLine[h-1];
p2:=B2.ScanLine[h-1];
p3:=B3.ScanLine[h-1];
l:=w*h*bpp-1;
Mix; //!!!!!!!!!!111
end;


 
MBo ©   (2003-01-05 12:53) [1]

Alpha*C1+(1-Alpha)*C2


 
F1 ©   (2003-01-05 12:57) [2]

Ага, блин, я от двух умножений специально уходил, медленнее получается :(


 
Verg ©   (2003-01-05 15:50) [3]

Че-то я не помню,.... а

sub al,bl //(p1-p2)
imul bh
add bl,ah
mov [edx],bl


Не канает?


 
F1 ©   (2003-01-05 16:49) [4]

>Verg © (05.01.03 15:50)
Нет! :(



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.01 c
3-5382
Rule
2003-02-11 23:04
2003.03.03
Вопрос по Интербейз и подключение из Интернета.


3-5425
softik
2003-02-12 20:30
2003.03.03
Работаю с 1С через ОЛЕ. Программа работает на разлчиных машинах.


1-5627
VIB
2003-02-20 10:44
2003.03.03
Printer


1-5645
Volly
2003-02-19 17:33
2003.03.03
Экспорт из RTF в HTML


14-5800
VEG
2003-02-12 20:35
2003.03.03
Как правильно написать такой тип:




   Наверх