Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.11;
Скачать: CL | DM;

Вниз

Быстрый сдвиг массива точек на дробное значение точек.   Найти похожие ветки 

 
Дмитрий Белькевич   (2005-07-10 17:29) [0]

Нужно _быстро_ сдвинуть картинку 512x512 на дробное число точек. Сделал, что называется, "в лоб". "В лоб" медленно:

    for i := BegCountX to EndCountX do
     for j := BegCountY to EndCountY do
      Buff8[j * Width + i] := Round(
       ABuff8[(j - IntY) * Width + i - IntX + FirstShift] * FirstInt +
       ABuff8[(j - IntY) * Width + i - IntX + SecShift] * SecondInt +
       ABuff8[(j - IntY) * Width + i - IntX + ThirdShift] * ThirdInt +
       ABuff8[(j - IntY) * Width + i - IntX + FourtShift] * FourthInt);

Считаю интенсивности четырех точек (FirstInt - FourthInt), и их относительные координаты (FirstShift-FourtShift).
IntY, IntX - целые части сдвига.
Точки лежат в двух линейных массивах. ABuff8 - оригинальный массив массив, Buff8 - получаемый.


 
Virgo_Style ©   (2005-07-10 21:18) [1]

По идее, переход к целым числам и, соответственно, отказ от Round должен кое-что дать... Хотя вряд ли это сильно поможет, но все же - попробуй избавиться от дробных чисел.

Например, Round(X*0.5) -> (X*5 div 10)


 
Магнитон Борыч   (2005-07-10 21:50) [2]

А как обращаешься к пикселам?


 
Магнитон Борыч   (2005-07-10 22:16) [3]

Оптимизация в лоб:

 pp1 := BegCountX - IntX + FirstShift;
 pp2 := BegCountX - IntX + SecShift;
 pp3 := BegCountX - IntX + ThirdShift;
 pp4 := BegCountX - IntX + FourtShift;
 for i := BegCountX to EndCountX do begin
   aa := BegCountY * Width + i;
   dd := (BegCountY - IntY) * Width;
   for j := BegCountY to EndCountY do begin
     Buff8[aa] := Round(
       ABuff8[dd + pp1] * FirstInt +
       ABuff8[dd + pp2] * SecondInt +
       ABuff8[dd + pp3] * ThirdInt +
       ABuff8[dd + pp4] * FourthInt);
     Inc(aa, Width);
     Inc(dd, Width);
   end;
   pp1 := pp1 + 1;
   pp2 := pp2 + 1;
   pp3 := pp3 + 1;
   pp4 := pp4 + 1;
 end;


Если

Я так и не понял что значит "сдвинуть картинку 512x512 на дробное число точек"? Данные в массиве ABuff8 дробные? Как он и Buff8 связаны с картинкой?



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

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

Наверх




Память: 0.47 MB
Время: 0.042 c
2-1132566744
arkan
2005-11-21 12:52
2005.12.11
База данных (SQL)


2-1132565333
Express
2005-11-21 12:28
2005.12.11
UpCase


1-1131936511
Razor
2005-11-14 05:48
2005.12.11
Как правильнее передавать строки в DLL?


14-1132296265
Knight
2005-11-18 09:44
2005.12.11
Спам или реальность?


14-1132388817
ищущий ответ
2005-11-19 11:26
2005.12.11
Водительское удостоверение и менты