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

Вниз

Вывода битмапа по маске и под углом   Найти похожие ветки 

 
Evgnevius ©   (2009-12-09 14:31) [40]

а что такое xForm?


 
Рамиль ©   (2009-12-09 15:28) [41]


> а что такое xForm?

Матрица аффинного преобразования (в виде рекорда).     XFORM = record
         eM11 : Single;
         eM12 : Single;
         eM21 : Single;
         eM22 : Single;
         eDx : Single;
         eDy : Single;
      end;
    LPXFORM = ^XFORM;
    _XFORM = XFORM;
    TXFORM = XFORM;
    PXFORM = ^XFORM;

   
Трудно нажать Ctrl и щелкнуть?


 
antonn ©   (2009-12-09 15:48) [42]


> Этот перебор и есть главный тормоз не смотря на то, что
> используется ScanLine.

попробуй фастлиб


 
Evgnevius ©   (2009-12-09 15:59) [43]

Рамиль, спасибо за ваше терпение. Я нажимал Ctrl и щёлкал. Кроме того, нажимал ещё и F1.
antonn, Если фастлиб не использует видеокарту, то спасибо. Процессор не хочу напрягать, так как пишу плагин, в котором на одном битмапе другой должен выводиться в разных пропорциях и с разными углами поворотов от нескольких сотен до нескольких тысяч раз. Координаты вывода для каждого битмапа должны пересчитываться динамически. Спасибо за предложенную помощь.


 
antonn ©   (2009-12-09 16:05) [44]

не стоит выкидывать процессор, он не так уж плох :)
если нужно выводить с последующим отображением на экране, то зачем делать это несколько тысяч раз?


 
Evgnevius ©   (2009-12-11 23:10) [45]

Несколько тысяч - это конечно многовато. Скорее - несколько сотен раз. А зачем - это уже зависит от поставленной задачи. Если хотите, можете поглядеть, на наше творчество 2-х летней давности, то, что мы сделали без использования OpenGL, чисто на ресурсах процессора.

www.ntlab.su


 
Evgnevius ©   (2009-12-12 00:10) [46]

Ладно, ребят. Вижу, что все вы хотите мне помочь, однако, как я понял, специалисты по OpenGL на этот топик не заходили. Придётся исхитряться


 
Рамиль_   (2009-12-12 16:28) [47]

GDI+ за глаза.
Почитайте книжку про компьютерную графику, будет намного легче.


 
Sapersky   (2009-12-12 19:24) [48]

Evgnevius ©   (09.12.09 01:22) [37]

М-да, похоже, чукча катастрофически не читатель.
Ткну носом в фастлибовский код (вариант без сглаживания). Разницу с твоим в кол-ве операций замечаешь?

for y:=0 to Dst.Height-1 do begin
 dy:=cy-y;
 sdx:=(ax+(isin*dy))+xd;
 sdy:=(ay-(icos*dy))+yd;
 for x:=0 to Dst.Width-1 do begin
   dx:=sdx shr 16;
   dy:=sdy shr 16;
   if(dx<Src.Width)and(dy<Src.Height)then pc^:=Src.Pixels24[dy,dx];
   Inc(sdx,icos);
   Inc(sdy,isin);
   Inc(pc);
 end;
 pc:=Ptr(Integer(pc)+Dst.Gap);
end;

Теория, если коротко, такова:
1) Вращение - это аффинное преобразование, и сводится к операции умножения на матрицу (уже писали). Точнее, конкретно для вращения (+ пропорционального масштабирования) достаточно иметь два коэфф-та, синус-косинус, ну и смещение (ещё два числа).
2) Для поддержки масштабирования/сглаживания удобнее считать обратное преобразование, т.е. результирующая картинка считается неповёрнутой, а из исходной пиксели выбираются с поворотом.
3) Можно упростить формулу преобразования за счёт того, что последовательно считаются соседние по горизонтали пиксели, и в результате свести всё к двум сложениям на пиксель.
4) Желательно использовать fixed point (эмуляцию дробных чисел целыми), т.к. с плавающей точкой Round тормозит.

Хотя сотни FPS на высоких разрешениях результирующей картинки этот код может не потянуть (старичок P3-1200, 800*600, 8 бит: без сглаживания - 70 FPS, со сглаживанием - 40), но по сравнению с твоим - в десятки-сотни раз быстрее.

Видеокарта, конечно, повернёт быстрее, но там свои проблемы. Передача данных в видеопамять не мгновенна, а если понадобится в обратном направлении (для доп. обработки на CPU) - наверняка растеряешь на этом всё ускорение, разве что на самых последних картах оно не очень тормозит (GF GTS, возможно GF 8000-9000 серий). Как вариант - перенести вообще всю обработку картинок на видеокарту (шейдеры, GPGPU...). Но это, прямо скажем, непросто, а для каких-то специфических алгоритмов может быть вообще невозможно.



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

Форум: "Начинающим";
Текущий архив: 2010.02.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.006 c
3-1233828628
ganda
2009-02-05 13:10
2010.02.07
Поднять мусор из базы данных FireBird 1/5


2-1260364091
abhtr
2009-12-09 16:08
2010.02.07
Помогите перевести str1 := =?UTF-8?B?0JrQsNC6INC/0L7QsdC...


2-1260482915
Aleks
2009-12-11 01:08
2010.02.07
динамически создаваемые объекты как их удалить?


15-1259746350
Хитрий Лис
2009-12-02 12:32
2010.02.07
Какие у кого мысли о книжке Американское сало ?


4-1228799718
Skyle
2008-12-09 08:15
2010.02.07
Непонятки с USB сканером с эмуляцией COM. Не работает RXFLAG.





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