Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.03;
Скачать: 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 вся ветка

Текущий архив: 2003.03.03;
Скачать: CL | DM;

Наверх




Память: 0.45 MB
Время: 0.008 c
4-5909
cult
2003-01-08 16:24
2003.03.03
Перекрытие WndProc для стандартных виндовых контролов


7-5880
And00
2003-01-04 11:41
2003.03.03
Метка диска


1-5482
Th
2003-02-20 16:19
2003.03.03
Смена цвета фона главного меню в программе


7-5886
FoxM
2003-01-04 12:49
2003.03.03
res - файл


9-5370
VitGun
2002-09-18 18:14
2003.03.03
Свет,туман





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский