Я использую Delphi 2007 и работаю над некоторым программным обеспечением для презентаций.Текущий модуль, над которым я работаю, - это фильтр перехода для видео.Код перехода, который я использую (модуль PSEffects в TPicShow), требует X и значение Y на основе размеров кадра и хода перехода.Вот код
Type
TPercent = 0..100;
var
ATo : TBitmap; //
Prog : Integer; //Progress of the transition
if ATo.Width >= ATo.Height then
begin
X := MulDiv(ATo.Width, Prog, High(TPercent));
Y := MulDiv(X, ATo.Height, ATo.Width);
end
else
begin
Y := MulDiv(ATo.Height, Prog, High(TPercent));
X := MulDiv(Y, ATo.Width, ATo.Height);
end;
Я пытаюсь оптимизировать это и увидел, что могу сохранить вычисления, которые будут постоянными (до изменения размеров ATo), и удалить 2 вычисления деления в каждом кадре.
Так что это будет что-то вроде
{All of these are calculated when the dimensions of ATo Change}
WDP : real; // width divided by High(TPercent)
HDW : real; // Height divided by width
HDP : real; // Height divided by High(TPercent)
WDH : real; // Width divided by Height
if ATo.Width >= ATo.Height then
begin
X := Trunc(WDP * Prog);
Y := Trunc(HDW * X);
end
else
begin
Y := Trunc(HDP * Prog);
X := Trunc(WDH * Y);
end;
Звучит хорошо, но не имеет фактического кода MulDiv, я не могу быть уверен.Если это просто (очень упрощенно)
MulDiv(a,b,c : Integer)
begin
Round((A*B)/C);
end
Тогда я знаю, что мои изменения будут более эффективными, однако, если MulDiv сделает что-то очень крутое с оптимизацией функции (что я мог бы предположить), тогда я 'Я не уверен, что мои изменения приведут меня к какому-либо результату.
Могут ли мои изменения быть более эффективными?
РЕДАКТИРОВАТЬ: Я еще не реализовал это, я просто развлекаю понятие.