Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.03.03;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.036 c
1-5485
Weare
2003-02-20 11:13
2003.03.03
Не могу освободить ресурсы.


14-5829
Юров Владимир
2003-02-13 11:07
2003.03.03
Не открывается аттач


1-5622
Andrushk
2003-02-20 09:44
2003.03.03
Можно ли перегрузить конструктор? Если да, то как?


3-5441
VovikA
2003-02-13 13:07
2003.03.03
Как прочитать и откатить транзакцию в MS Sql 200


14-5727
kaif
2003-02-14 13:07
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский