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

Поиск:

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


Ищущий
*


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

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



Дорогой alexeis1, отвечаю на твои ИМХО.
По поводу "не задумывались ли вы" - задумывались. Я все проекты, а этот тем более тестирую на самых слабых кофигурациях. К примеру:
Ноутбук: 650Mhz, 128 озу XP SP2, ATI RAGE MOBILE (BELL), дрова не поставлены на видео. Результат по скорости на глаз одинаков, НО стандартная отрисовка глючит (визуально) - при перемещении дуратские полосы появляются - не успевает отрисовывать. С OpenGL всё отлично, плюс ещё и сглаживание.
На компах быстрее этого (стационарных уже) разницы никакой вообще нет. И это при всём при том что в OGL ещё и сглаживание есть, если его включить в стандартной отрисовке - она тормозит, но это понятно и так. Тестил именно на офисных компах, с интегрячим видео.

На счёт 
Цитата(alexeis1 @  12.12.2006,  13:21 Найти цитируемый пост)
 OpenGL не всегда нормально инициализируется на встроенных карточках.
 и 
Цитата(alexeis1 @  12.12.2006,  13:21 Найти цитируемый пост)
Вы что не видели сколько проблем иногда возникает после инсталяции игр.
: я уже писал, что юзаю стандартный модуль openGL.pas от дельфи 7. Если ты посмотришь в него, то увидишь что это перевод сёвого заголовочного файла образца 1993 года, т.е. я использую только стандартные функции, рисую через glBegin/glEnd, никаких буферов, никаких расширений - только примитивные фунции. Так что можно уже сказать что любая софтварная эмуляция OpenGL отлично справится с отрисовкой, и если возникнут проблемы - то на PCIных карточках и если винда ниже 2000 - 95 или 98 - там да, после установки игра может внаглую заменить opengl32.dll своим файликом, но это я уже такие дебри гипотез строю, что не имеет смысла продолжать.

Резюмирую: я использую только стандартные функции отрисовки, которые реализованы в железе на любой видюхе у которой есть хоть какой-то ускоритель (не важно какой, хоть 3D хоть 2D) и будут нормально отрабатывать на винде от 98 (в 95 по дефолту opengl32.dll нет, нужно самому ставить).

В любом случае, если довести до ума - вынести всё в отдельный отрисовщик - то метод отрисовки можно будет переключать на лету - пусть юзер сам смотрит что у него быстрее работает.


Цитата(alexeis1 @  12.12.2006,  15:59 Найти цитируемый пост)
ИМХО на OpenGl - это как из пушки по воробьям. 

Я эту понял твою мысль ещё с первого твоего поста smile Зааметь: о том что я собираюсь стрелять по птичкам с гаубицы я предупредил с самого начала smile
У тебя какое-то однобокое представление об OpenGL, типа OpenGL=GAMES. Не забывай, это изначально промышленный стандарт. С помощью него очень удобно рисовать графические примитивы, к тому же ещё и ускорение от железа получаем. Для интереса глянь код что я добавил - его минимум. Это действительно удобная штука, работать с ним одно удоводьствие, размер программы он никаким боком не увеличивает, ибо opengl.pas - это заголовочный файл, скорость работы OpenGL - см тест я в начале привёл, баги и прочая радость - я использую только стандартные, первородные функции, очень сомневаюсь что они хоть где-то будут глючить.


s-mike
Цитата(s-mike @  12.12.2006,  12:27 Найти цитируемый пост)
То есть? Можешь объяснить, что ты имеешь ввиду? Область рассчитывается исходя из размера клиентской области компонента, масштаба, если картинка меньше ширины/высоты компонента, то она центрируется. То есть учитываются все факторы, находятся координаты, которые будет занимать изображение на компоненте, и координаты фрагмента изображения, который должен быть смасштабирован и отрисован в компоненте.

Ок, простой пример и ты всё поймёшь: создай картинку-чекер - разлинованная в черно/белую клетку картинка. Сделай зум, скажем в 300% - и подёргай ширину/высоту компонента - увидишь (если сразу не увидел) искажения. Потом возьми мой компонент, сделай то же самое - искажений нет. Эти искажения из-за того что ClientWidth компонента не кратен ширине изображения после зума.

Добавлено @ 17:13 
Да, забыл сказать, даже если OpenGL будет эмулироваться - скорость будет такой же как у стандартной отрисовки, т.к. эмуляция идёт средствами того же GDI.
PM MAIL   Вверх
Alexeis
Дата 12.12.2006, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Цитата(Coriolis @  12.12.2006,  17:09 Найти цитируемый пост)
при перемещении дуратские полосы появляются - не успевает отрисовывать. С OpenGL всё отлично, плюс ещё и сглаживание.

  Гм. ну это уже прелести кода отрисовки. Просто как мне кажется, что при правильной организации такого не должно быть. Тадо будет затестить компонентик smile 


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

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

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


Ищущий
*


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

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



Не, дело не в коде отрисовки - там простой стреч блит стоит. Может полосы и не из-за того что не успевает отрисовывать, нет. Похоже на то, когда fps превышает герцовку монитора, а vsync не включен - но какая тут нафиг fps... smile Не знаю, знаю что моя отрисовка так не глючит.

Цитата(alexeis1 @  12.12.2006,  17:52 Найти цитируемый пост)
Тадо будет затестить компонентик

Ну с этого и надо было начинать.
PM MAIL   Вверх
s-mike
Дата 13.12.2006, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Coriolis @  12.12.2006,  17:09 Найти цитируемый пост)
Ок, простой пример и ты всё поймёшь: создай картинку-чекер - разлинованная в черно/белую клетку картинка. Сделай зум, скажем в 300% - и подёргай ширину/высоту компонента - увидишь (если сразу не увидел) искажения. Потом возьми мой компонент, сделай то же самое - искажений нет. Эти искажения из-за того что ClientWidth компонента не кратен ширине изображения после зума.

А я кажется понял в чем проблема ;) Там небольшой баг, не выставляется halftone-сглаживание для StretchBlt. Его нужно вручную выбрать в комбобоксе Stretch Method (либо в свойствах самого компонента в design-time), тогда все будет отлично и со сглаживанием ;)
PM MAIL WWW   Вверх
Alexeyt
Дата 31.1.2007, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



s-mike

Да, надо же, не знал про этот компонент раньше. Пришлось писать свой "image на ScrollBox"...

Сейчас посмотрю, но на всякий случай сразу предложение:
св-ва
"Умещать картинку"
"Умещать только картинку, бОльшую размера комп-та" (не трогать меньшую)
"Центрировать картинку" (для картинок, ментших размера комп-та)

Я у себя это реализовал, но не помешает и здесь, если потом надумаю этот комопнент использовать...

PM WWW   Вверх
Coriolis
Дата 31.1.2007, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
*


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

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



s-mike
Цитата(s-mike @  13.12.2006,  11:43 Найти цитируемый пост)
А я кажется понял в чем проблема ;) Там небольшой баг, не выставляется halftone-сглаживание для StretchBlt. Его нужно вручную выбрать в комбобоксе Stretch Method (либо в свойствах самого компонента в design-time), тогда все будет отлично и со сглаживанием ;)

"тогда все будет отлично и со сглаживанием " и с тормозами, незабывай.
И это - совсем не выход. Сглаживанием ты спрятал косяк. Выход - как сделал я - правильно рассчитал размеры. И меня в этом вопросе не переспорить. Я же говорю - ты пошел по быстрому пути - натянул на окно вывода изображение. Отсюда и глюки. А надо натягивать на виртуальное окно - которое по размерам чуть больше окна компонента (или чуть меньше) - его размеры должны рассчитываться исходя из зума и размеров окна компонента, чтобы остаток от деления ширины/высоты на велечину зума был нулевым.


Alexeyt
Цитата(Alexeyt @  31.1.2007,  19:00 Найти цитируемый пост)
если потом надумаю этот комопнент использовать...

Да, ага, все кинулись дописывать, чтобы МОЖЕТ БЫТЬ, КОГДА НИБУДЬ, дорогой Alexeyt заюзал компонент :-D
А серьёзно - это всё есть в этом мегакомпоненте, ищи лучше.
PM MAIL   Вверх
Alexeyt
Дата 31.1.2007, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Пробую демо:

1. при уменьшении картинки (уменьшении масштаба меньше 100%) картинка (jpeg) идет какими-то квадратиками. Отчего это? Система Win XP SP2.

2. Опция AutoCenter что должна делать - центрировать картинку? И без нее все центрируется, а с ней инчего не меняется...

3. Ту опцию которая "may hang" я бы вообще запретил. smile
Т.е. использовать бы не стал - на каком-то железе может зависнуть, зачем это нужно.

4. Не хвататет опции "ресемплинг такой-то". Как в IrfanView, там где-то 4-6 вариантов фильтра ресайза (правильно я понимаю, что это и есть ресемплинг?)

А так комопнент неплохой, нужный...


Coriolis
Цитата

Да, ага, все кинулись дописывать, чтобы МОЖЕТ БЫТЬ, КОГДА НИБУДЬ, дорогой Alexeyt заюзал компонент :-D
А серьёзно - это всё есть в этом мегакомпоненте, ищи лучше. 


Спасибо, буду смотреть. smile


Это сообщение отредактировал(а) Alexeyt - 31.1.2007, 19:34
PM WWW   Вверх
s-mike
Дата 31.1.2007, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Alexeyt @  31.1.2007,  19:30 Найти цитируемый пост)
1. при уменьшении картинки (уменьшении масштаба меньше 100%) картинка (jpeg) идет какими-то квадратиками. Отчего это? Система Win XP SP2.

Писал выше. Поставь в комбобоксе halftone сглаживание.

Цитата(Alexeyt @  31.1.2007,  19:30 Найти цитируемый пост)
2. Опция AutoCenter что должна делать - центрировать картинку? И без нее все центрируется, а с ней инчего не меняется...

Опция влияет только на центрирование изображений, которые по размерам больше клиентской области компонента.

Цитата(Alexeyt @  31.1.2007,  19:30 Найти цитируемый пост)
Т.е. использовать бы не стал - на каком-то железе может зависнуть, зачем это нужно.

Железо тут причем? Зависит от реализации компонента для работы с конкретным графическим форматом. С TJpegImage работает. А вот с TRxGifImage не работает, зависает. Разбираться не было времени, подозреваю, что класс-декодер (как и в случае с TBitmap) просто не генерирует событие OnProgress. Узнать программно об этом невозможно, поэтому я и сделал предупреждение.

Цитата(Alexeyt @  31.1.2007,  19:30 Найти цитируемый пост)
4. Не хвататет опции "ресемплинг такой-то". Как в IrfanView, там где-то 4-6 вариантов фильтра ресайза (правильно я понимаю, что это и есть ресемплинг?)

Насчет ресемплинга: смотри выше про halftone.

Это сообщение отредактировал(а) s-mike - 31.1.2007, 19:54
PM MAIL WWW   Вверх
s-mike
Дата 31.1.2007, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Coriolis @  31.1.2007,  19:12 Найти цитируемый пост)
"тогда все будет отлично и со сглаживанием " и с тормозами, незабывай.
И это - совсем не выход. Сглаживанием ты спрятал косяк. Выход - как сделал я - правильно рассчитал размеры. И меня в этом вопросе не переспорить. Я же говорю - ты пошел по быстрому пути - натянул на окно вывода изображение. Отсюда и глюки. А надо натягивать на виртуальное окно - которое по размерам чуть больше окна компонента (или чуть меньше) - его размеры должны рассчитываться исходя из зума и размеров окна компонента, чтобы остаток от деления ширины/высоты на велечину зума был нулевым.

А тормоза причем тут к неверной отрисовке? Я написал, почему изображение может неправильно отрисовываться. Это во-первых.

А во-вторых я не понимаю, чем твой "быстрый и более грамотный" метод отрисовки отличается от ничуть не менее быстрого COLORONCOLOR, то есть простой Stretch? Как его можно сравнивать с HALFTONE? Взгляни сам на разницу:
http://smike.drkb.ru/temp/OpenGL.png
http://smike.drkb.ru/temp/Halftone.png
http://smike.drkb.ru/temp/Stretch.png

Что касается грамотности. Возможно для OpenGL хранение смасштабированной текстуры изображения и является грамотным подходом. Но не забывай, что для хранения текстуры размером 2048x2048 потребуется более 4 мегабайт памяти. Твой вариант программы с изображением размером 2976x1952 в BMP формате масштабом 410% занимает в памяти более чем 80 мегабайт оперативной памяти и столько же виртуальной. В то время как мой вариант занимает более чем в 2 раза меньше (40 оперативной и 35 виртуальной). Поэтому я не исключаю твоего варианта, но я не считаю, что он самый грамотный и оправдан в любых ситуациях (особенно в случае ограниченного количества оперативной памяти). Они оба имеют право на жизнь и использовать нужно тот, который более оптимален в конкретной задаче.

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


Опытный
**


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

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



s-mike
Цитата

Опция влияет только на центрирование изображений, которые по размерам больше клиентской области компонента.


Ясно. Хотя лучше бы влияла на любой случай (и бОльшие, и меньшие картинки). Напр.: видел в Тотал Коммандере 7 опицю "Центрировать изображение"? Она на все размеры влияет...

С halftone ясно.

А прикрутить другие фильтры ресайза можно?
Я про IrfanView.

PM WWW   Вверх
s-mike
Дата 31.1.2007, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Alexeyt @  31.1.2007,  21:02 Найти цитируемый пост)
Ясно. Хотя лучше бы влияла на любой случай (и бОльшие, и меньшие картинки). Напр.: видел в Тотал Коммандере 7 опицю "Центрировать изображение"? Она на все размеры влияет...

Возможно, не задумывался как-то. Возможно учту.

Цитата(Alexeyt @  31.1.2007,  21:02 Найти цитируемый пост)
А прикрутить другие фильтры ресайза можно?

В IrfanView при просмотре изображение тоже halftone-ом масштабируется. Дело в том, что "прикрутить" не такая уж и проблема (даже событие есть для этого), только не лучшим способом это скажется на производительности. Все-таки нужно различать фильтры для просмотра и для качественного уменьшения картинок.
PM MAIL WWW   Вверх
Alexeyt
Дата 3.2.2007, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Есть у компонента англ. страница/описание? Финскому товарищу показать, он как раз просмотр картинок делает, мучается с TImage...

PM WWW   Вверх
s-mike
Дата 3.2.2007, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Пока нет.
PM MAIL WWW   Вверх
Alexeyt
Дата 7.2.2007, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А почему в демо нет (или есть, я не вижу?) опции рендера через DirectX/OpenGL?
На скринах, выложенных в теме, рендерится через OGL, как это повторить?

PM WWW   Вверх
Snowy
Дата 7.2.2007, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Потому что тему читать нужно smile
http://forum.vingrad.ru/index.php?showtopi...st&p=957000
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

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

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

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

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


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

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


 




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


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

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