Текущий архив: 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.45 MB
Время: 0.048 c