Модераторы: Snowy, Alexeis, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Image Controls 2.0 
:(
    Опции темы
evstp
Дата 7.11.2006, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 3.11.2006

Репутация: нет
Всего: нет



Цитата(Snowy @ 12.10.2006,  11:49)
Поправил первый пост - прикрепил туда свежую версию Image Controls 2.1.1

В архиве вродь версия 2.0  smile 
PM MAIL   Вверх
Snowy
Дата 7.11.2006, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 18
Всего: 484



Нет, там версия 2.1.1. Просто текстовка не поправлена smile
PM MAIL   Вверх
Coriolis
Дата 18.11.2006, 02:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 22.8.2005

Репутация: нет
Всего: 1



Ага, первое впечатление отличное, да...
А когда начинаешь юзать........
В общем багов хватает.
Не, компонент рулезный, но баги... 
Замучался уже. И править всё конкретно лениво - вдруг автор опять за код сядет.
Да, возможность выделения области - было бы супер, сам сейчас это пытаюсь реализовать - столько ньансов...

Так, из последнего:
Прорисовщик компонента FastScroll отображает правую и нижнюю полоску пикселей при зуме только при определённых значениях ширины/высоты компонента. Так как блитом картинка тупо растягивается по ширине/высоте, не учитывая велечины зума. Отсюда же кстати и артефакты зуминга.
Зум - вообще отдельная песня, после того как его меняешь - летит всё. Во первых, зачем-то по умолчанию стоит в качестве рисовальщика метод контейнера с картинкой, после изменения зума устанавливается рисовальщик класса FastScroll. Потом, перестаёт работать кнопка скрола - срабатывает только левая, хотя до зума работает та что в настройках. Ну это примерно понятно почему, тоже поправил, но следствие - не причину(сообщения все поймал в компоненте и обработал).

Да уж, сумбурный пост получился, и негатива много, но компонент всё равно отличный - просто немного довести его надо. Для простейших вещей (для прямого назначения) его хватает за глаза, а вот что-то добавить (выделение области например) - уже баги попадаются.
В любом случае - автору ШПАСИБА и РЕШПЕКТ. smile
PM MAIL   Вверх
s-mike
Дата 18.11.2006, 02:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 16.1.2005
Где: Киев

Репутация: 5
Всего: 16



Должен признать, что реализация у меня получилась весьма мутная. Даже я отказался от его практического использования, поскольку на доводку понадобилось бы слишком много времени. Поэтому решил ограничиться более простой, но намного более надежной реализацией с использованием GDI+. Правда производительностью скроллинга она не отличается. Вот и остается 2 дилемы - производительность либо практичность. FastScrollingImage и написан с целью обеспечить максимальную скорость скроллинга. Но когда необходимо было добавить масштабирование, то в компонент пришлось внести много костылей, чтобы не снизить прежнюю производительность в масштабе 100%.

Цитата(Coriolis @  18.11.2006,  02:12 Найти цитируемый пост)
Во первых, зачем-то по умолчанию стоит в качестве рисовальщика метод контейнера с картинкой, после изменения зума устанавливается рисовальщик класса FastScroll.

Делать масштабирование субкомпонента уж слишком накладно

Это сообщение отредактировал(а) s-mike - 18.11.2006, 02:39
PM MAIL WWW   Вверх
Coriolis
Дата 18.11.2006, 02:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 22.8.2005

Репутация: нет
Всего: 1



Цитата

но намного более надежной реализацией с использованием GDI+

ПОДЕЛИСЬ КОДОМ!!! Пожалуйста smile
Я тоже всё что добавляю делаю через GDI+

Цитата

Делать масштабирование субкомпонента уж слишком накладно

Дак после изменения зума при отрисовке вызывается Paint уже FastScroll'а, в нём примерно та же самая реализация что и в контейнере. Код практически 1:1
PM MAIL   Вверх
s-mike
Дата 18.11.2006, 02:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 16.1.2005
Где: Киев

Репутация: 5
Всего: 16



Цитата(s-mike @  18.11.2006,  02:36 Найти цитируемый пост)
FastScrollingImage и написан с целью обеспечить максимальную скорость скроллинга.

В результате экспериментов было выявлено, что использования субкомпонента обеспечивает наивысшую скорость скроллинга. Особенно было хорошо заметно на компьютерах со встроенным видеоадаптером.

Кстати, хотелось бы посмотреть на внесенные исправления ;)
PM MAIL WWW   Вверх
Coriolis
Дата 18.11.2006, 03:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 22.8.2005

Репутация: нет
Всего: 1



Цитата

В результате экспериментов было выявлено, что использования субкомпонента обеспечивает наивысшую скорость скроллинга. Особенно было хорошо заметно на компьютерах со встроенным видеоадаптером.

Так, я правильно понял - субкомпонент - это имеется в виду твой бипмап контейнер? 
(*стягивает на лоб ушанку и чешет затылок)

Изменения я вышлю тебе мылом, но сам понимаешь - если уж ты признал наличие костылей, то мои доделки даже костылями не назвать...

Намаялся я с проблемой нормальной работы + возможностью выделения прямоугольной области. Третью неделю ковыряю. Не каждый день конечно, но времени потерял много. Эта трабла мне напоминает мелкого и назойливого воробья - так и хочется достать свою любимую крупнокалиберную пушку (DirectX / OpenGL) и расстрелять этого воробья в клочья smile

Вот какая идея:
Создаю свой TBitmapContainer, наследуя от твоего. Метод Paint - ф топку, у всех владельцев тоже. В конструкторе этого контейнера создаю thread safe D3DX8 устройство, рендеринг выношу в отдельный тред, ставлю ограничение на макс ФПС в 25 скажем, при Visible - рендеринг идёт, not Visible - рендеринг на паузе.
Сам рендеринг - бесконечный кикл, рендерится квад на весь handle родительского GraphicControl'а, для навигации и зума просто меняю текстурные координаты, если есть рамки - то еще по 4 квада на рамку.
В итоге, что получается:
1) Вся отрисовка переносится на видео, проц на 99% свободен. Даже на оффисном компе будет летать, ибо единственный напряг для проца - переслать несколько байт для обновления текстурных координат и вызов команды драйвера, который в большинстве случаев переадресует вызов на железо.
2) Можно делать красивые анимированные рамки (текстурной анимацией например).
3) Качество сглаживания по прежнему остаётся управляемым, причем железо это сделает по любому быстрее проца.
Минусы:
требование DX8. Восьмой с XP по дефолту идёт, но на машинах с младшими операционками придётся ставить. Можно сделать и на OpenGl - тада DX вообще не нужен будет - gl дрова от видюхи обновляют... Но это всё займёт у меня больше времени чем на DX, я ogl не очень знаю (хотя, для такой простой вещи...).

ВотЪ, такой вариант. Будет ли это работать с твоими конролами? Вот вопрос.
PM MAIL   Вверх
Coriolis
Дата 23.11.2006, 02:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 22.8.2005

Репутация: нет
Всего: 1



Итак, что сделал:
Во первых, отбросил идею рендеринга в отдельном потоке - не имеет смысла.
Во вторых реализовал задуманное на OpenGL, подключив стандартный дельфийский файл opengl.pas

Сделал через DEFINE - если определено USE_OPENGL - отрисовка идёт через OpenGL.
Все изменения затронули TCustomScrollingImage и TScrollingImage.
В TCustomScrollingImage инициализация OpenGL при создании окна, обновление текстуры.
В TScrollingImage добавил код в процедуру Paint - в случае существования USE_OPENGL используется не канвас с GDIшными блитами, а OpenGL код.
Так же добавил property ZoomFilter (NEAREST, LINEAR) - сглаживание на халяву, как говорится.

С точки зрения конечного пользователя ничего не изменилось (в плане кода). Поэтому просьба к людям, которые использовали ImageControls в проектах опробовать изменённый компонент и отписаться о результате.

Сегодня запустил на работе у товарисча с компом с интегрированным видео - вполне шустро работало, по моему быстрей даже чем через GDI, чего и добивался.

Известные глюки(сейчас над ними работаю):
- переворачивает мелкую картинку.

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

Предупреждаю, баги компонента я не правил, они все так и остались. Я взял последнюю доступную версию и добавил GL код через DEFINE.
В FastScroll чтобы заработало OpenGL надо после сразу после загрузки картинки сделать
Zoom := 200;
Zoom := 100;
Чтобы включился нужный отрисовщик, это баг не мой - это баг компонента (или фича?.. я так и не понял s-mike).

Вообще, s-mike пропал. Письмо для него назад приходит, на личку не отвечает. Баги бы поправить... Да он мне нужен еще чтобы поставил свой штамп "Одобряю" на коде. ;)

Это сообщение отредактировал(а) Coriolis - 12.12.2006, 12:06
PM MAIL   Вверх
s-mike
Дата 4.12.2006, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 16.1.2005
Где: Киев

Репутация: 5
Всего: 16



Я прошу прощения, пока не было и нету времени, в ближайшие дни обещаю вернуться к этому вопросу, возможно даже и к работе над компонентом...
PM MAIL WWW   Вверх
s-mike
Дата 12.12.2006, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 16.1.2005
Где: Киев

Репутация: 5
Всего: 16



Посмотрел пример с OpenGL-ем. Интересная идея, но работает не совсем корректно. И лично я против влезания в сам исходник компонента для добавления не относящейся к нему напрямую функциональности. Предлагаю сделать вывод через OpenGL по другому: наследником. Для этого я переделаю иерархию классов, сделаю в основном классе виртуальные события самой отрисовки, но при этом основной класс будет управлять выводом (что выводить, когда, масштабирование, вывод скроллбаров).
PM MAIL WWW   Вверх
Coriolis
Дата 12.12.2006, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 22.8.2005

Репутация: нет
Всего: 1



О, а вот и сам разработчик.
На счёт работает некорректно - это был прототип, он должен был показать саму идею, тем более тут лежала старая версия твоих контролов, и я встраивал в старую версию.
Твоя версия так вообще бажила по страшному - мне непонятно почему ты сделал растягивание картинки на область отображения - ведь она при зуминге искажается и "гуляет" при изменении размера компонента. По идее надо расчитывать размер куска отображаемой картинки исходя от зума а не от высоты/ширины компонента. Я в последней версии заколебался уже с этим бороться и сделал свой расчёт этого куска, он без искажений - как во всех нормальных редакторах.

Сейчас я уже утилиту написал с использованием openGL версии, и отловил все баги которыу нашёл.

По поводу того что встраивать в компонент так жёстко нехорошо - согласен на 100%, это совсем некрасиво, но так как тебя небыло, и единственный код который ты предоставил не позволил сделать это безболезненно... Так что сделал как смог. Но ведь работает же smile

Выложу сюда на всякий случай последнюю версию компонента с OpenGL, я там дополнительный функционал по отрисовке примитивов (рамки, прямоугольники) вынес в отдельный компонент.

Когда переделаешь иерархию - я напишу OpenGL отрисовщик, будет вообще супер. При проектировании обрати внимание на функцию CreateWnd - там у меня GL инициализируется на хандл окна компонента, поэтому мне как-то надо в отрисовщике тоже самое сделать.

Это сообщение отредактировал(а) Coriolis - 12.12.2006, 13:11

Присоединённый файл ( Кол-во скачиваний: 35 )
Присоединённый файл  Image_Controls.zip 105,59 Kb
PM MAIL   Вверх
s-mike
Дата 12.12.2006, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 16.1.2005
Где: Киев

Репутация: 5
Всего: 16



Цитата(Coriolis @  12.12.2006,  12:05 Найти цитируемый пост)
По идее надо расчитывать размер куска отображаемой картинки исходя от зума а не от высоты/ширины компонента. Я в последней версии заколебался уже с этим бороться и сделал свой расчёт этого куска, он без искажений - как во всех нормальных редакторах.

То есть? Можешь объяснить, что ты имеешь ввиду? Область рассчитывается исходя из размера клиентской области компонента, масштаба, если картинка меньше ширины/высоты компонента, то она центрируется. То есть учитываются все факторы, находятся координаты, которые будет занимать изображение на компоненте, и координаты фрагмента изображения, который должен быть смасштабирован и отрисован в компоненте.
PM MAIL WWW   Вверх
Alexeis
Дата 12.12.2006, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



  Меня посетила вот такая вот мысля. Насколько я знаю OpenGL хорошо работает только там где установлены драйвера на видюху от производителя, т.е. ATI или NVidia, а вы не задумывалсь, что в офисах или на ноутбуках могут ставить просто дефолтные драйвера, которые "не знают" как эффективно использовать OpenGL в результате вас ждут приличные тормоза из-за процессорной эмуляции. OpenGL не всегда нормально инициализируется на встроенных карточках. Вы что не видели сколько проблем иногда возникает после инсталяции игр. Одна видна нормально запускает другая глючит. Ладно игры там нужно 3D ускорение и без него совсем труба. Но тут же требуется 2D ускорение с которым легко справится стандартный драйвер, тем более, что он то как раз умеет работать с железом видюхи так Microsoft свои технологии поддерживает своими драйверами. Я рекомендую использовать GDI или GDI+. При их правильном использовании можно получить тоже неплохую скорость. Если, что я могу тоже включится в работу.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Snowy
Дата 12.12.2006, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 18
Всего: 484



alexeis1, речь о том и ведётся, чтобы сделать наследника.
Хочешь - через GDI делай, а хошь - через GL.
Что касается скорости - у меня на ноуте видео интегрячее.
Но визуально по скорости отличий не заметил.
Посмотрю дома - с ускорителем.
Там явно GL пошустрее будет работать.

Цитата(alexeis1 @  12.12.2006,  13:21 Найти цитируемый пост)
а вы не задумывалсь, что в офисах или на ноутбуках могут ставить просто дефолтные драйвера
В офисах устанавливают драйвера, а не оставляют дефолтные.
С дефолтными просто задница какая-то, а не работа.
И GL на машинах есть практически всегда.
PM MAIL   Вверх
Alexeis
Дата 12.12.2006, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Цитата(Snowy @  12.12.2006,  13:37 Найти цитируемый пост)
В офисах устанавливают драйвера, а не оставляют дефолтные.
  С дефолтными просто задница какая-то, а не работа.


  Не сказал бы. Возможно так на ATI. Например, хрюша находит для моей старушки GeForce440 mx приличный драйвер, с которым можно отлично работать, и даже в игры играть и при этом никакой разницы практически нет. Аналогичная ситуация с Riva TNT. Для нее вообще при работе на DirectX реализуются все ее апартные возможности, а вот с OpenGL нифига, без драйвера от производителя все будет эмулироваться процом. 

Цитата(Snowy @  12.12.2006,  13:37 Найти цитируемый пост)
Хочешь - через GDI делай, а хошь - через GL.

ИМХО на OpenGl - это как из пушки по воробьям. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Страницы: (6) Все « Первая ... 2 3 [4] 5 6 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.1611 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.