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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Image Controls 2.0 
:(
    Опции темы
s-mike
Дата 19.3.2005, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



 Наконец-то я выкладываю новую версию своей библиотеки компонентов.

Что нового в этой версии?

   1. Добавлен компонент TTexturePanel.
   2. В TCustomScrollingImage добавлено масштабирование, а также автоматическое масштабирование по размеру компонента.
   3. Изменена иерархия компонентов для скроллинга, теперь TFastScrollingImage наследуется от TScrollingImage.
   4. Наследники TCustomScrollingImage, а также компоненты TBitmapContainer и TBitmapPanel теперь имеют свойство Transparent, позволяющее делать компонент прозрачным.
   5. Добавлена возможность нестандартной отрисовки изображения в компонентах для скроллинга.
   6. Добавлено изменение курсоров для скроллинга в design-time с помощью свойств ImageCanScrollCursor, ImageDragCursor, ImageScrollDisabled.
   7. В TCustomScrollingImage добавлены свойства RealImagePos, RealImageLeft, RealImageTop, по которым можно узнать настоящие координаты изображения в компоненте, учитывая то, что оно может неполностью заполнять компонент.
   8. Добавлено в TCustomScrollingImage свойство CanScrollWithMouse, позволяющее запретить скроллинг с помощью мыши.
   9. Исправлен глюк в навигаторе при щелчке в нем правой кнопкой мыши.
  10. В модуль ImgCtrlUtils добавлена процедура LoadGraphicToBitmap и немного подправлена функция IsEmptyPicture.
  11. Добавлен модуль ImgCtrlsSkins.
  12. Устранены другие небольшие баги и ошибки.

Жду ваших пожеланий и оценок!

Версия 2.1.1:

Это сообщение отредактировал(а) Snowy - 4.12.2006, 14:17

Присоединённый файл ( Кол-во скачиваний: 395 )
Присоединённый файл  ImgCtrls211.zip 160,46 Kb
PM MAIL WWW   Вверх
Illusion Dolphin
Дата 19.3.2005, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Из первых впечатлений:
1) ScrollingImage
FitImage -> Abstract Error или деление на ноль

(
function TCustomScrollingImage.GetFitImageScale: Extended;
begin
Result := Min(ClientWidth / FPicture.Width, ClientHeight / FPicture.Height); //тутя бы проверил FPicture на не nil и FPicture.Height и FPicture.Width на не о
end;
)
2) Я бы добавил события на скрол мыши, если их нет (я не заметил)
события на скрол мыши

3)
ScrollingImageNavigator1 - чтобы можно было правой кнопкой задавать размер области - было бы очень неплохо





--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
s-mike
Дата 19.3.2005, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



1) Ой, сенкс, не заметил.
2) Насчет этого события у меня есть сомнения. Его сделать несложно, но оно будет работать только тогда, когда компонент будет иметь фокус. Но удобно ли это? В демке я сделал возможность скроллинга колесом мыши, когда курсор находится над компонентом. Мне кажется, что это удобнее, а делается не так уж сложно. В хелпе об этом даже написал. Но если я неправ, то прошу меня поправить.
3) Работаем! smile Версия ведь не последняя. Но насчет правой клавиши не уверен, потому что может понадобиться сделать контекстное меню. Так что думаю сделать просто метод, который будет вызывать зум в навигаторе. А вызывать этот метод можно будет по событиям от мыши в рантайм.

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


Опытный
**


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

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



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


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


Опытный
**


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

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



Цитата(kirilllius @ 19.3.2005, 22:27)
Особенно удивило, что при масштабировании изображения, границы изображения сглаживаются, а не остаются в зазубринах как в стандартном TImage.

Вот этого я как раз и не понял smile . Ничего особенного для масштабирования я не использовал - апишная функция StretchBlt. Масштабирование конечно не очень качественное, но зато более-менее быстрое. Но если нужно качественное, то есть событие OnScaleImage, где можно как угодно масштабировать изображение.
PM MAIL WWW   Вверх
offline
Дата 19.3.2005, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Да вроде при уменьшении картинки она выглядит более приятней, чем в стандартном TImage но не столь идеально как в компоненте G32. Будет ли идти работа в направлении улучшении качества картинки при изменении размера (Resample)?


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


Опытный
**


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

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



Цитата(kirilllius @ 19.3.2005, 23:11)
Будет ли идти работа в направлении улучшении качества картинки при изменении размера (Resample)?

Функций для ресэмплинга существует много, своих я пока не придумал. Чужих брать не хочется. StretchBlt врядли заменю, разве что найду что-то более быстрое. Но естественно хотелось бы найти (или придумать smile ) что-то более качественное и быстрое.
PM MAIL WWW   Вверх
Vit
Дата 20.3.2005, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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



Прикреплю пока тему... Думаю актуально, пусть повисит немного


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
s-mike
Дата 20.3.2005, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Vit @ 20.3.2005, 09:46)
Прикреплю пока тему... Думаю актуально, пусть повисит немного

Спасибо

Это сообщение отредактировал(а) s-mike - 20.3.2005, 10:40
PM MAIL WWW   Вверх
p0s0l
Дата 20.3.2005, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Цитата
Ничего особенного для масштабирования я не использовал - апишная функция StretchBlt. Масштабирование конечно не очень качественное, но зато более-менее быстрое.
Эта функция тоже может сглаживать... Правда не при любых масштабах... Но можно сделать свойство, где бы включалось сглаживание... Хуже, думаю, никому от этого не станет...
См. функцию SetStretchBltMode + HALFTONE


--------------------
С уважением, г-н Посол.
PM   Вверх
s-mike
Дата 20.3.2005, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



p0s0l, спасибо, но это я знаю. Но тут дело вот в чем: HALFTONE в SetStretchBltMode не работает под Win9x. Просто получается, что под этими ОС это свойство будет просто не востребовано, поэтому я решил, что лучше сделать событие на масштабирование.

Источник: http://msdn.microsoft.com/library/default....itmaps_6cth.asp
PM MAIL WWW   Вверх
p0s0l
Дата 20.3.2005, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



s-mike, это оно конечно есть такое дело... Но я бы всё равно добавил такое свойство, тем более что труда это много не отнимет, всего десяток лишних строчек... А то что оно не будет работать на Win9x - дык возьми свойство AlphaBlend у TForm - оно тоже не работает на Win9x, но всё-таки его добавили... Просто картинка в Win9x будет выглядеть хуже, чем в Win2k/XP - согласись: это всё же лучше, чем если бы везде выглядело "плохо" ? Тем более, учитывая то, что процент людей, использующи Win9x постоянно падает...
В общем, если бы я делал эти компоненты, то я бы сделал такое свойство... А ставить его в True или нет - оставил бы на совести программиста, который бы использовал эти компоненты, ему виднее - надо это или нет...

Но дело твоё конечно smile...

Ну и я решил потестить немного... Честно говоря, почти ниодного дейсвия я не смог сделать без каких либо глюков, или непонятностей - очень сыро, недоделано и недоработано! smile

1. Только-только кинул компонент на форму... Загрузил картинку... Ставлю Transparent = True, FitImage = True, как лезут сплошные "Range Checking Error"...

2. FitImage - всё-таки нужно после его изменения в True перемасштабировать картинку... А то как-то неудобно, что нужно специально изменять размеры...

3. ---

4. Не вижу свойства Proportional smile - может я не хочу, чтобы всё было пропорционально ?

5. Странная работа FitImage - если изменить размер по горизонтали - то масштаб не меняется, если по вертикали - меняется... Странная логика... Кто сказал, что вертикаль главнее горизонтали ? В итоге не очень красивые ситуации получаются...

6. Zoom - имхо, должно быть ZoomX и ZoomY... Если Proportional = True, то эти Zoom'ы при изменении друг другу приравниваются...

7. FitImage = True, размер компонента больше размера картинки - Zoom не делается автоматически больше 100%... Имхо, нужно ввести доп. свойство типа АвтоУвеличения - если оно = True, то Zoom может делаться больше 100, иначе - не может.

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

Ладно, теперь беру TBitmapPanel:

9. В общем опять, загружаю эту же картинку... Хочу испробовать Transparent, ставлю в True... Но чтобы проверить, нужно увеличить компонент так, чтобы было незанятное картинкой место... Увеличиваю - опять "Range Checking Error"... Мдя... Возможно, это тот же глюк, что и в п.1
В общем, подумав, что всё-таки дело в особенности картинки, загрузил другую - эффект тот же...
Вывод: если Transparent = True, и есть незанятое место, то Range Checking Error...

Поглядев на свойства, понял, что тут больше тестить нечего... smile

Достаю ScrollingImage, загружаю в него картинку:
10. Ставлю FitImage = True - Abstract Error... Причем дальше вроде как всё работает - размеры картинки подгоняются под размеры контрола... Ставлю FitImage = False - опять Abstract Error...
В общем, при изменении FitImage вылазит ошибка

11. AutoCenter = True, FitImage = False, меняю размеры компонента - автоцентрирования не проиходит

12. Непонятно: CanScroll = True, CanScrollWithMouse = False, как теперь я могу скроллировать ?

13. По поводу п.12 думаю: наверное, есть какой-то метод для скроллирования... Вижу ScrollBy - он работает как со включенным CanScroll, так и с выключенным... Зато работает он как-то странно... Т.е. сдвигает картинку, но вообще по-левому... Зачем этот метод такой нужен ? Если он для внутреннего использования, то народовать его не надо...

Вроде больше ничего интересного в свойствах не вижу... Теперь достаю FastScrollingImage:

14. Тоже очередная проблема с Transparent...

15. В общем, пробую Zoom - меняю-меняю - нифига не масштабируется... Так как и было в реальном масштабе - так и осталось (FitImage = False)... Запускаю проект - показывается в Zoom-масштабе... Т.е. в Design-time не работает эта весчь...

16. FitImage делаю True, тоже в Design-time не масштабируется... Хотя Zoom меняется... Видимо - это последствие п. 15...
Запускаю проект - Exception EReadError, Error reading FastScrollingImage1.FitImage: Floating point division by zero...
Потыкав еще свойства, я потом уже вообще ни при каких значения FitImage и Transparent не мог запустить проект... Дело спасло только удаление компонента и вытаскивание нового...

17. Ставлю свойство Cursor, выбрал крестик - запускаю - стрелочка... Свойство не работает...

18. Убавил размеры компонента, чтобы не полностью влезала картинка... Ставлю ScrollButton = mbRight, всё равно двигается не правой, а левой кнопкой...

В общем я уже устал и тестить и писать... SBScrollingImage - даже не стал смотреть...

Это сообщение отредактировал(а) p0s0l - 20.3.2005, 22:12


--------------------
С уважением, г-н Посол.
PM   Вверх
s-mike
Дата 20.3.2005, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(p0s0l @ 20.3.2005, 22:03)
1. Только-только кинул компонент на форму... Загрузил картинку... Ставлю Transparent = True, FitImage = True, как лезут сплошные "Range Checking Error"...

Уже в общем то исправлено, об этом еще Illusion Dolphin говорил.
Цитата(p0s0l @ 20.3.2005, 22:03)
2. FitImage - всё-таки нужно после его изменения в True перемасштабировать картинку... А то как-то неудобно, что нужно специально изменять размеры...

В рантайм оно так должно и быть. В дизайн-тайм после исправлений abstract error тоже работает (обновление скоро выложу).
Цитата(p0s0l @ 20.3.2005, 22:03)
3. ---

А это что значит?
Цитата(p0s0l @ 20.3.2005, 22:03)
4. Не вижу свойства Proportional  - может я не хочу, чтобы всё было пропорционально ?

Не видел чтобы в каком либо из графических вьеров или редакторов была такая возможность, ИМХО то что это есть в TImage - извращение.
Цитата(p0s0l @ 20.3.2005, 22:03)
5. Странная работа FitImage - если изменить размер по горизонтали - то масштаб не меняется, если по вертикали - меняется... Странная логика... Кто сказал, что вертикаль главнее горизонтали ? В итоге не очень красивые ситуации получаются...

Вот этого я до конца не понял. Изображение ужимается под размер контрола, если оно больше клиентской облсти компонента. Пропорционально.
Цитата(p0s0l @ 20.3.2005, 22:03)
6. Zoom - имхо, должно быть ZoomX и ZoomY... Если Proportional = True, то эти Zoom'ы при изменении друг другу приравниваются...

Опять же говорю - сделать несложно, но вот какое этому практическое применение?
Это разумная мысль, согласен.
Цитата(p0s0l @ 20.3.2005, 22:03)
7. FitImage = True, размер компонента больше размера картинки - Zoom не делается автоматически больше 100%... Имхо, нужно ввести доп. свойство типа АвтоУвеличения - если оно = True, то Zoom может делаться больше 100, иначе - не может.

Цитата(p0s0l @ 20.3.2005, 22:03)
8. В общем, как-то необдуманно и глючно работает система увеличения - нужно её пересмотреть, перерыть, перетестить. И главное - удобство использования, и гибкость. Гибкость почти отсутствует...

Хм, хотелось бы услышать более конкретную информацию.
1) Что глючно?
2) В чем неудобства?
3) Какая нужна гибкость?
Сам я может о чем-то не догадываюсь?

Цитата(p0s0l @ 20.3.2005, 22:03)
9. В общем опять, загружаю эту же картинку... Хочу испробовать Transparent, ставлю в True... Но чтобы проверить, нужно увеличить компонент так, чтобы было незанятное картинкой место... Увеличиваю - опять "Range Checking Error"... Мдя... Возможно, это тот же глюк, что и в п.1
В общем, подумав, что всё-таки дело в особенности картинки, загрузил другую - эффект тот же...
Вывод: если Transparent = True, и есть незанятое место, то Range Checking Error...

Range check error не замечал, но то что это свойство работает неправильно - факт. Буду исправлять.
Цитата(p0s0l @ 20.3.2005, 22:03)
11. AutoCenter = True, FitImage = False, меняю размеры компонента - автоцентрирования не проиходит

Это не глюк, я и делал его с таким расчетом, достаточно посмотреть исходный код. Я делал компонент по образу и подобию ACDSee и там такого не наблюдается, изображение центрируется только при загрузке. Да и практической ценности ИМХО в этом никакой. Если я не прав - прошу поправить.
Добавлено @ 23:10
Цитата(p0s0l @ 20.3.2005, 22:03)
12. Непонятно: CanScroll = True, CanScrollWithMouse = False, как теперь я могу скроллировать ?

Сделано свойство для TSBScrollingImage для возможности скроллинга только скроллбарами. Для других компонентов этой серии идентично CanScroll. Наверно надо его перенести все-таки в TSBScrollingImage, наверно так будет понятней.
PM MAIL WWW   Вверх
s-mike
Дата 20.3.2005, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(p0s0l @ 20.3.2005, 22:03)
13. По поводу п.12 думаю: наверное, есть какой-то метод для скроллирования... Вижу ScrollBy - он работает как со включенным CanScroll, так и с выключенным... Зато работает он как-то странно... Т.е. сдвигает картинку, но вообще по-левому... Зачем этот метод такой нужен ? Если он для внутреннего использования, то народовать его не надо...

Хе-хе, ScrollBy - это не моего компонента метод, а унаследован от TWinControl и предназначен естественно совершенно не для того. Так что претензии ко мне тут совершенно необоснованные. Для этого предусмотрен метод ScrollImage.
Добавлено @ 23:29
Цитата(p0s0l @ 20.3.2005, 22:03)
15. В общем, пробую Zoom - меняю-меняю - нифига не масштабируется... Так как и было в реальном масштабе - так и осталось (FitImage = False)... Запускаю проект - показывается в Zoom-масштабе... Т.е. в Design-time не работает эта весчь...

Ндаа... Что-то там с VCL-ем не то. Не хайдится дочерний контрол-контейнер изображения. Попробую разобраться.
PM MAIL WWW   Вверх
s-mike
Дата 20.3.2005, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(p0s0l @ 20.3.2005, 22:03)
Запускаю проект - Exception EReadError, Error reading FastScrollingImage1.FitImage: Floating point division by zero...
Потыкав еще свойства, я потом уже вообще ни при каких значения FitImage и Transparent не мог запустить проект... Дело спасло только удаление компонента и вытаскивание нового...

Симитировать не получилось, поподробнее плиз...
Цитата(p0s0l @ 20.3.2005, 22:03)
17. Ставлю свойство Cursor, выбрал крестик - запускаю - стрелочка... Свойство не работает...

Похоже нужно это свойство спрятать. Оно ничего не дает и не даст. Для изменения курсора служат три других свойства: ImageCanScrollCursor, ImageDragCursor, ImageScrollDisabled. Но скорей всего в новой версии они будут переименованы.
PM MAIL WWW   Вверх
s-mike
Дата 20.3.2005, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(p0s0l @ 20.3.2005, 22:03)
18. Убавил размеры компонента, чтобы не полностью влезала картинка... Ставлю ScrollButton = mbRight, всё равно двигается не правой, а левой кнопкой...

Странно, у меня все нормально. Может быть в таких случаях постить код с ошибкой? Или прислать мне на мыло?



Спасибо за проведенное тестирование. Согласен, что компоненты немного сыроватые, хотелось побыстрее выложить новую версию. Скоро думаю уже выкладывать апдейт. В нем постараюсь исправить все вышеуказанные глюки. Насчет спорных вопросов хотелось бы услышать более серьезные аргументы, а также мнение других.
PM MAIL WWW   Вверх
p0s0l
Дата 21.3.2005, 02:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



s-mike, я говорил "баги" и "непонятности"... одни исправляются, другие - объясняются... и заносятся в хелп, если что smile, а большинство пунктов - были непонятности и предложения... Баги касались почти только FitImage и Transparent - очень портят впечатление... особенно первое впечатление... Всё же стоит проверить получше компоненты, прежде чем выставлять на публику...

Цитата(s @ 20.3.2005, 23:08)
Это не глюк, я и делал его с таким расчетом, достаточно посмотреть исходный код. Я делал компонент по образу и подобию ACDSee и там такого не наблюдается, изображение центрируется только при загрузке. Да и практической ценности ИМХО в этом никакой. Если я не прав - прошу поправить.
Согласен...

Цитата(s @ 20.3.2005, 23:08)
Хм, хотелось бы услышать более конкретную информацию.
1) Что глючно?
2) В чем неудобства?
3) Какая нужна гибкость?
Сам я может о чем-то не догадываюсь?
Речь шла о системе масштабирования:
1) В большинстве случаев всё что связяно с FitImage - либо не работает, либо приводит к Exception'ам, приводящие к невозможности запуска проекта...
2) Неудобства - некачественное масштабирование...
3) Гибкость:
а) добавить Proportional
б) добавить свойство, чтобы Zoom мог быть > 100%
в) разделить Zoom на ZoomX и ZoomY
Для удобства, возможно, все опции масштабирования (если их будет больше 3-4) следует скомпоновать в одно свойство (как к примеру Options у DBGrid)...

Насчет:
Цитата(s @ 20.3.2005, 23:08)
Не видел чтобы в каком либо из графических вьеров или редакторов была такая возможность, ИМХО то что это есть в TImage - извращение.
Цитата(s @ 20.3.2005, 23:08)
Опять же говорю - сделать несложно, но вот какое этому практическое применение?
Пример навскидку: картинка сжата с каким-то левым Aspect Ratio, с помощью непропорционального масштабирования можно сделать её нормальной...
Или может мне просто надо в какой-то прямоугольник вписать картинку, пусть с небольшим искажением... Не одни ведь вьюверы показывают картинку на форме...
Или ты делаешь конкретно для вьюверов компоненты (а судя по последним постам, я убеждаюсь что так, хотя об этом вроде нигде нислова) ?... Если так - то конечно же, всё это (то что выше) будет излишним... Тогда нужно работать в направлении поддерживаемых форматов и в направлении качественного масштабирования, а не сваливать эту часть на пользователя... По-крайней мере масштабирование-то можно постараться сделать (без StretchBlt)...

Цитата
Симитировать не получилось, поподробнее плиз...
Было так: запускаешь проект - выскакивает исключение... Прога автоматически закрывается... В Delphi хочу отрубить FitImage, а при тыке на компонент вываливаются Range Checking Error... Это всё легко повторить... А вот то что потом прога с выключенным FitImage не запускалась - сейчас немного потыркался - повторить не получилось... smile
Возможно это были глюки Delphi после долгих Range Checked Error-ов... хотя... ???
В любом случае, мне кажется, если ты устранишь этот несчастный баг с FitImage, то проблем не будет...

Цитата
Range check error не замечал, но то что это свойство работает неправильно - факт. Буду исправлять.
Странно... У меня постоянно такой еррор с включенным транспарентом... хм...

Цитата
Вот этого я до конца не понял. Изображение ужимается под размер контрола, если оно больше клиентской облсти компонента. Пропорционально.
Мдя... Извини за ложную тревогу, тут всё нормально.

Цитата
Странно, у меня все нормально. Может быть в таких случаях постить код с ошибкой? Или прислать мне на мыло?
Кода никакого нет, всё делается в инспекторе мышкой... Но тут я немного поспешил: этот глюк на самом деле у TSBScrollingImage... Сейчас снова перепроверил - свойство не работает, всё равно скроллируется левой кнопкой... Если что, могу выслать проект на мыло...
Других глюков в TSBScrollingImage (кроме FitImage, Transparent и Zoom) - не замечено...

ЗЫ: По поводу ScrollingImageNavigator - было бы неплохо, если бы как в ACDSee можно было выделять прямоугольник (т.е. так сразу можно указать место и масштаб)...


--------------------
С уважением, г-н Посол.
PM   Вверх
s-mike
Дата 21.3.2005, 02:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(p0s0l @ 21.3.2005, 02:08)
В любом случае, мне кажется, если ты устранишь этот несчастный баг с FitImage, то проблем не будет...

Пожалуй так оно и было. Я перед этим исправлял баги smile
Цитата(p0s0l @ 21.3.2005, 02:08)
Но тут я немного поспешил: этот глюк на самом деле у TSBScrollingImage...

Тоже у меня нормально. Странно.

Теперь насчет редактора и вьера. Хотелось бы конечно сделать универсальный компонент, который если и не будет, скажем иметь возможность качественного масштабирования или непропорционального масштабирования или поддержку многих форматов файлов, но будет давать возможность все это добавить. Такую возможность я ставил перед собой при написании этих компонентов. Плюс не хотелось бы изобретать велосипед. Ну например для масштабирования существуют различные функции, многие из них включены в библиотеки. Также существует много библиотек файловых форматов. Зачем мне делать еще одну такую библиотеку? Лучше ИМХО дать возможность использовать существующие.

Теперь насчет непрпорционального масштабирования. Раз уж зашла речь о редакторах, то возьмем к примеру фотошоп (мой любимый smile ). В нем нет непропорционального масштаба, а функция эта осуществляется так же, как скажем изменение размера или добавление контраста. То есть это уже является отдельной функцией, для которой есть отмена и пр. Поэтому даже для редактора можно изменить необходимым образом свойство TScrollingImage.Picture и все изменения отобразятся в компоненте. В добавлении непропорционального масштаба я по прежнему не вижу необходимости.

Вот насчет увеличения небольших изображений до размера окна - согласен, можно добавить. Также добавлю выбор метода масштабирования (обычный или Halftone). Ничего, работающего быстрее я пока не нашел (но ищу). Все функции качественного масштабирования, с которыми я работал, выполняются в несколько раз дольше StretchBlt c режимом Halftone.
PM MAIL WWW   Вверх
p0s0l
Дата 21.3.2005, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Цитата
Тоже у меня нормально. Странно.
Причем такая странность:
сейчас вытащил заново этот компонент - и на моё удивление свойство как бы и работает...
Хм...
Загружаю тот старый проект - протираю глаза, смотрю на свойство ScrollButton - оно = mbRight, запускаю - скроллится левой кнопкой!
Так что всё-таки возможно, раз это какой-то непостоянный баг, этим страдает не только TSBScrollingImage (я сказал:
Цитата
Но тут я немного поспешил: этот глюк на самом деле у TSBScrollingImage...
лишь потому, что повторить этот глюк получилось на TSBScrollingImage, хотя вроде на моей памяти, когда я первый раз говорил о баге, я тогда работал с TFastScrollingImage... хотя могу ошибаться...)
Проект сейчас вышлю...

Еще одна сомнительная особенность, обнаружил пока возился со ScrollButton, (проверял на TSBScrollingImage и на TFastScrollingImage), если стоит mbRight:
если держать правую кнопку (на картинке), потом увести мышь за пределы формы, а там уже отпустить правую кнопку мыши, то при возврате курсора на форму прога думает, что как будто-бы правая кнопка всё еще нажата...
Этим не страдает mbLeft...

Еще почему-то у TScrollingImage нет свойства ScrollButton ?...


Добавлено @ 11:23
Уже собирался выслать проект с багом мышки, как выяснил причину... После некоторых экспериментов наметился такой синдром: если Zoom = 100, то ScrollButton работает... При любых других Zoom'ах скроллируется только левой кнопкой, независимо от значения ScrollButton.
Этим страдает как TSBScrollingImage, так и TFastScrollingImage...



--------------------
С уважением, г-н Посол.
PM   Вверх
p0s0l
Дата 21.3.2005, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Насчёт масштабирования - может всё-таки встроишь один из лучших методов, которые ты встречал ?
Т.к. тот, кто будет юзать этот компонент, вряд ли найдёт что-то более лучшее...
То бишь сделать свойство СпособМасштабирования, где выбирается:
1 Простое масштабирование (StretchBlt без Halftone)
2 Halftone-масштабирование (StretchBlt с Halftone)
3 Качественное масштабирование (твоё масштабирование)
4 Пользовательское масштабирование (т.е. через OnScaleImage)...

Так имхо, в этом смысле, было бы самое то smile



--------------------
С уважением, г-н Посол.
PM   Вверх
p0s0l
Дата 21.3.2005, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Если у TSBScrollingImage выключить ScrollBarVisible, то в Design-time нормально, а в run-time под скролл-бар всё равно отводится место, но оно не отрисовывается (ни Color'ом, ни фоном родителя...), при чем это обнаруживается только если сделать так, чтобы скроллировать можно было только либо по горизонтали, либо по вертикали (но не все вместе)
Да и потом как выяснилось, даже с 2 скроллбарами не всё ок (см. присоединенную картинку) - при запуске рядом со скроллбаром паказывается часть того, что под формой...

Если я пишу SBScrollingImage2.Picture.Canvas.xxx (т.е. рисую), то меня перекидывают на показ левой-верхней части картинки (т.е. обнуляется ImagePos)... Имхо, лучше будет, если возможно, то ImagePos не менять...

Это сообщение отредактировал(а) p0s0l - 21.3.2005, 13:32

Присоединённый файл ( Кол-во скачиваний: 24 )
Присоединённый файл  bag1.gif


--------------------
С уважением, г-н Посол.
PM   Вверх
p0s0l
Дата 21.3.2005, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Навигатор: если обнулить свойство ScrollingImage, то картинка остаётся прежней...
Также, если обнулить Picture у связанного с навигатором имейджа, картинка тоже останется прежней (правда на этот раз исчезнет прямоугольник)...

Для удобства, имхо, нужно сделать, чтобы свойству Picture можно было присваивать не только TBitmap, но вообще любой TGraphic (типа как метод LoadGraphic)...

TSBScrollingImage:
Неправильно настраиваются скроллбары - т.е. если я проскроллируюсь до конца вправо вниз с помощью мышки, на скроллбарах ползунки будут не в концах, а где-то в середине, хотя мотать уже и некуда... (это, кстати, видно на предыдущей картинке - видно уже самый правый край картинки, а на горизонтальном скроллбаре ползунок находится не в конце...)
Непонятное описание: ScrollHome, ScrollEnd - имхо, надо указать, куда конкретно, а то что такое "конец изображения" ? (догадаться можно, но всё-таки...)
Также, сделав ScrollEnd рядом с обоими скроллабарами появились неправильно отрисованные места (вернее, они не перерисовались, там остался прежний кусок картинки), скорее всего это тот же глюк, что и тот, который при запуске формы был...


Это сообщение отредактировал(а) p0s0l - 21.3.2005, 16:18


--------------------
С уважением, г-н Посол.
PM   Вверх
Vit
Дата 21.3.2005, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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




Модератор: Сообщение скрыто.



--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
s-mike
Дата 22.3.2005, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



p0s0l, со ScrollButton я понял в чем ошибка, спасибо, буду исправлять, а вот насчет:
Цитата(p0s0l @ 21.3.2005, 11:19)
Еще одна сомнительная особенность, обнаружил пока возился со ScrollButton, (проверял на TSBScrollingImage и на TFastScrollingImage), если стоит mbRight:
если держать правую кнопку (на картинке), потом увести мышь за пределы формы, а там уже отпустить правую кнопку мыши, то при возврате курсора на форму прога думает, что как будто-бы правая кнопка всё еще нажата...
Этим не страдает mbLeft...

я знаю, но к сожелению не понимаю, как это можно исправить smile Может кто-нибудь поможет? (К слову: этим страдает и IrfanView).
Цитата(p0s0l @ 21.3.2005, 11:19)
Еще почему-то у TScrollingImage нет свойства ScrollButton ?...

Из-за этого и глюк со ScrollButton smile

Цитата(p0s0l @ 21.3.2005, 12:37)
Насчёт масштабирования - может всё-таки встроишь один из лучших методов, которые ты встречал ?

Lanczos3 масштабирует очень качественно (хоть и хуже, чем Halftone), но очень медленно, в 10 раз. Так что скроллинг изображения будет очень медленным. Если найду что-нибудь качественное и быстрое (а может кто-то посоветует?), то сделаю, а пока скорее всего придется довольствоваться 3 методами...
Цитата(p0s0l @ 21.3.2005, 12:37)
То бишь сделать свойство СпособМасштабирования, где выбирается

Интересная идея, подумаю.

С остальным еще буду разбираться.
PM MAIL WWW   Вверх
p0s0l
Дата 22.3.2005, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Можно попробовать решить проблему с правой кнопкой через SetCapture...
Добавляем SetCapture в BitmapMouseDown:
Код
procedure TFastScrollingImage.BitmapMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if Button = FScrollButton then
    if FScrollEnabled and FCanScrollWithMouse then
    begin
      FX := Mouse.CursorPos.X;
      FY := Mouse.CursorPos.Y;

      FDragging := True;
      Screen.Cursor := FImageDragCursor;
      SetCapture (Handle);
    end;

  if Assigned(FOnMouseDown) then FOnMouseDown(Sender, Button, Shift, X, Y);
end;

Добавляем ReleaseCapture в BitmapMouseUp:
Код
procedure TFastScrollingImage.BitmapMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if FDragging then
  begin
    FDragging := Button <> FScrollButton;
    if not FDragging then ReleaseCapture;
  end;

  if FScrollEnabled and FCanScrollWithMouse then Screen.Cursor := crDefault;

  if Assigned(FOnMouseUp) then FOnMouseUp(Sender, Button, Shift, X, Y);
  with TControl(Sender) do
    if (X >= 0) and (Y >= 0) and
       (X <= ClientWidth) and (Y <= ClientHeight) and
      Assigned(FOnClick) then FOnClick(Self);
end;

В объявление класса:
Код

    procedure RButtonUp (var msg : TWMRButtonUp); message WM_RBUTTONUP;
    procedure MButtonUp (var msg : TWMMButtonUp); message WM_MBUTTONUP;

А вот и сами процедурки:
Код

procedure TFastScrollingImage.RButtonUp;
begin
  BitmapMouseUp (Self, mbRight, [ssRight], msg.XPos, msg.YPos);
  inherited;
end;

procedure TFastScrollingImage.MButtonUp;
begin
  BitmapMouseUp (Self, mbMiddle, [ssMiddle], msg.XPos, msg.YPos);
  inherited;
end;



--------------------
С уважением, г-н Посол.
PM   Вверх
s-mike
Дата 22.3.2005, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо, с SetCapture я когда-то пробовал. Но и в этом варианте и тогда мышь не отжималась, т.е. при отжатии кнопки мыши изображение все равно продолжало скроллиться.
PM MAIL WWW   Вверх
p0s0l
Дата 22.3.2005, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Цитата(s @ 22.3.2005, 15:31)
Спасибо, с SetCapture я когда-то пробовал. Но и в этом варианте и тогда мышь не отжималась, т.е. при отжатии кнопки мыши изображение все равно продолжало скроллиться.
Странно... у меня работает... smile

Интересно, какой метод масштабирования используется в ACDSee ?
Найти бы такой, да прооптимизировать...
Он кстати очень и очень походит на Halftone, почти 1:1...



--------------------
С уважением, г-н Посол.
PM   Вверх
s-mike
Дата 22.3.2005, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(p0s0l @ 22.3.2005, 16:40)
Он кстати очень и очень походит на Halftone, почти 1:1...

Но гораздо быстрее...
PM MAIL WWW   Вверх
Illusion Dolphin
Дата 7.4.2005, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Ещё пару скажу слов по поводу компонентов.
1) Zoom - хорошое свойство, НО некрасиво работает при его изменении. Если я возьму зум в 100, выделю кусок у изображения., а потом поставлю зум в 400, то получу не увеличение середины того куска, который видел, а другой кусок (происходит смещение).
2) В навигаторе было бы хорошо сделать настройку цвета того прямоугольничка, который показывает текущие рамки.
3) Хотелось бы чтобы было свойство принудительного обновления картинки. Именно такое обновление, которое происходить если вызвать приватный метод Resize.
Это то, что наболело... Ща вот думал прибацать в проект пару компонентиков, но из-за пункта 1го может и придётся всё ручками опять бацать...

да, ещё, неплохо было бы ввести свойство GetZoom - возвращает эффективный зум, т.е. при фитимэйдж чтобы возвращал с каким зумам отображает, а без фитимэйдж - просто свойство Zoom.

Это сообщение отредактировал(а) Illusion Dolphin - 7.4.2005, 19:46


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
s-mike
Дата 7.4.2005, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Illusion @ 7.4.2005, 17:27)
1) Zoom - хорошое свойство, НО некрасиво работает при его изменении. Если я возьму зум в 100, выделю кусок у изображения., а потом поставлю зум в 400, то получу не увеличение середины того куска, который видел, а другой кусок (происходит смещение).

Я как раз так и стремился сделать... Странно, так вроде оно и есть. Можно подробнее?

Цитата(Illusion @ 7.4.2005, 17:27)
2) В навигаторе было бы хорошо сделать настройку цвета того прямоугольничка, который показывает текущие рамки.

Есть. TScrollingImageNavigator.Shape.Pen.Color. В новой версии (2.1 - которую надеюсь скоро выложить) есть еще и событие на отрисовку навигатора и прямоугольничка.

Цитата(Illusion @ 7.4.2005, 17:27)
3) Хотелось бы чтобы было свойство принудительного обновления картинки. Именно такое обновление, которое происходить если вызвать приватный метод Resize.
Это то, что наболело... Ща вот думал прибацать в проект пару компонентиков, но из-за пункта 1го может и придётся всё ручками опять бацать...

А стандартные методы? TCustomScrollingImage.Invalidate.
Цитата(Illusion @ 7.4.2005, 17:27)
да, ещё, неплохо было бы ввести свойство GetZoom - возвращает эффективный зум, т.е. при фитимэйдж чтобы возвращал с каким зумам отображает, а без фитимэйдж - просто свойство Zoom.

А свойство Zoom разве работает не так? Или я чего-то не понимаю?
PM MAIL WWW   Вверх
Illusion Dolphin
Дата 7.4.2005, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

А стандартные методы? TCustomScrollingImage.Invalidate.

Когда вручную пытался принудительно перерисовать после изменения свойства фитимэйдж этот метод не делал то. что был должен.

Цитата

А свойство Zoom разве работает не так? Или я чего-то не понимаю?

Прикольно smile

но на счёт первого тут что-то или у меня не так работает или что... При увеличении зума у меня на месте картинка не остаётся. Юзаю TScrollingImage. Уходит всё почему-то в правый нижний угол о_О. Могу и прогу выложить (экзешник и кусок формы где твой компонент), но это окло метра будет.

Файлик с прогой приложил.

Это сообщение отредактировал(а) Illusion Dolphin - 7.4.2005, 22:10

Присоединённый файл ( Кол-во скачиваний: 23 )
Присоединённый файл  new.zip


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
s-mike
Дата 10.4.2005, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Illusion Dolphin, с перемещением изображения после изменения зума глюки не мои, а у тебя в программе. Разбиратся я не стал, но если закомментировать обработчики события OnChangePos, то все нормально. То есть насколько я понял все из-за реализации механизма синхронного перемещения.
Цитата(Illusion @ 7.4.2005, 21:48)
Когда вручную пытался принудительно перерисовать после изменения свойства фитимэйдж этот метод не делал то. что был должен.

После изменения свойства FitImage изображение и так перерисовывается, так что этот пункт я до конца так и не понял. И если этот метод делал не то что нужно, то что же он делал?
PM MAIL WWW   Вверх
s-mike
Дата 10.4.2005, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Пожалуй пришло время выложить обещанный апдейт до версии 2.1.

Цитата
  1. По свежим следам исправлен глюк с GetFitImageScale при пустом изображении.
  2. Немного усовершенствована процедура отрисовки, в частности отрисовки с прозрачностью TScrollingImage.
  3. Исправлены баги в отрисовке TFastScrollingImage и TSBScrollingImage при включенной прозрачности (мерцание фона).
  4. Устранены глюки свойства FitImage в design-time в компонентах для скроллинга.
  5. Переименованы свойства

ImageCanScrollCursor -> CanScrollCursor
ImageDragCursor -> DragImageCursor
ImageScrollDisabled -> ScrollDisabledCursor

RealImagePos -> ImageOffset
RealImageLeft -> ImageOffsetLeft
RealImageTop -> ImageOffsetTop

  6. Свойство FitImage поделено на два свойства - AutoZoomImage и AutoShrinkImage.
  7. Удален модуль MiniMath потому что Math все равно используется в модуле Forms, а значит выгоды в использовании MiniMath нет.
  8. Добавлено событие OnPaint в навигаторе и для рамки навигатора. Соответственно опубликовано свойство Canvas.
  9. Устранен глюк, при котором при увеличении размера компонента TSBScrollingImage не перерисовывалась область спрятавшегося скроллбара.
  10. ScrollButton теперь добавлено у всех наследников TCustomScrollingImage. Исправлена неправильная работа этого свойства в TFastScrollingImage и TSBScrollingImage.
  11. В TCustomScrollingImage добавлено свойство StretchMode, позволяющее выбрать качество масштабирования изображения в компоненте. Названия значений свойства аналогичны значениям констант для WinAPI-функции SetStretchBltMode.

      К сожелению на данный момент остаются еще некоторые проблемы с работой компонента в design-time.


Ссылка для скачивания: ImgCtrls.zip (157 КБ)
PM MAIL WWW   Вверх
ДЫМ
Дата 25.9.2005, 02:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Не знаю, насколько это важно, может пустяк, но все же. У тебя размеры навигатора изменяются пропорционально высоте/ширине загруженного изображения, но если потянуть форму за верхний или нижний край, ничего не происходит, потому что ты пересчитываешь высоту оносительно новой ширины, а наоборот - нет. Так совпало, что я тоже недавно делал навигатор, для карты-схемы и тоже столкнулся с этой, проблемой. Решил с тобой поделиться, может заинтнресуешься.


Сначала добавляем обработчик сообщения WM_SIZING.
Код

...
procedure WMSizing(var Message: TMessage); message WM_SIZING;
...


Код

procedure TNavigatorForm.WMSizing(var Message: TMessage);
begin
 // я объявил глобальную переменную, (в OnCreate формы Side:=0),
 // хотя можно обойтись и без нее, но тогда новые размеры надо вычислять через
 // указатель на LParam, так что нагляднее в FormCanResize
 Side:=Message.WParam;
end;


procedure TNavigatorForm.FormCanResize(Sender: TObject; var NewWidth,
  NewHeight: Integer; var Resize: Boolean);
var k:Double;
begin
 // аспект
 k:=SourceWidth/SourceHeight;


 // тянули за углы или за левый/правый край, ширина гарантированно изменилась
 // пересчитываем высоту относительно ширины
 if iSide in [WMSZ_TOPLEFT,WMSZ_TOPRIGHT,WMSZ_BOTTOMRIGHT,
              WMSZ_BOTTOMLEFT,WMSZ_LEFT,WMSZ_RIGHT] then
  NewHeight:=Round(NewWidth/k)+GetSystemMetrics(SM_CYCAPTION)
 else
  // тянули за верхний/нижний край, изменилась только высота
  NewWidth:=Round((NewHeight-GetSystemMetrics(SM_CYCAPTION))*k);
end;


Это сообщение отредактировал(а) ДЫМ - 27.9.2005, 01:05
PM MAIL WWW   Вверх
s-mike
Дата 26.9.2005, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ДЫМ, в общем согласен, что так не совсем красиво. Надо будет устранить. smile
PM MAIL WWW   Вверх
MichaelS
Дата 25.11.2005, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



s-mike
можно тебя попросить об одном, компонент ScrollingImageNavigator очень подходит для моей задачи, т.е. нужно фиксированным! прямоугольником выделить нужную область фотографии и эту область сохранить, но у тебя увеличивает, если я ставлю увеличение = 0, маштаб 1:1, прямоугольник не двигается, и если изменять его размеры, тоже не двигается((
переправить твой код не хватает знаний((...подскажи как быть..
PM MAIL   Вверх
s-mike
Дата 3.12.2005, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(MichaelS @ 25.11.2005, 15:48)
s-mike
можно тебя попросить об одном, компонент ScrollingImageNavigator очень подходит для моей задачи, т.е. нужно фиксированным! прямоугольником выделить нужную область фотографии и эту область сохранить, но у тебя увеличивает, если я ставлю увеличение = 0, маштаб 1:1, прямоугольник не двигается, и если изменять его размеры, тоже не двигается((
переправить твой код не хватает знаний((...подскажи как быть..

Я планирую добавить возможность выделения в компоненте, но пока у меня мало времени для продолжения разработки компонента. Пока помочь ничем не могу.
PM MAIL WWW   Вверх
denmoroz
Дата 14.2.2006, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ЕЩЁ! Найдена бага приисовании на SBScrollingImage (на других не пробoвал)!
Она состоит в том,что линии и всё такое рисуются не там где курсор мыши, а на ~1.5-2 см вниз и всторону. smile
PM MAIL   Вверх
s-mike
Дата 15.2.2006, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
Она состоит в том,что линии и всё такое рисуются не там где курсор мыши, а на ~1.5-2 см вниз и всторону.

Покажи, как рисуешь.

Это сообщение отредактировал(а) s-mike - 15.2.2006, 13:45
PM MAIL WWW   Вверх
FF90h
Дата 12.10.2006, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 1.7.2006
Где: Планета Земля

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



 s-mike

  Не получается скачать, кинь пожалуйста другую ссылку!
PM MAIL   Вверх
Snowy
  Дата 12.10.2006, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Поправил первый пост - прикрепил туда свежую версию Image Controls 2.1.1
PM MAIL   Вверх
Sportsmen
  Дата 3.11.2006, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А что это за библиотека? Хотел скачать и посмотреть, но...
Скажите, пожалуйста. а как скачать?! Он мне HTML страницу скачивает?
PM MAIL ICQ   Вверх
Snowy
Дата 3.11.2006, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Image Controls 1.0 

включает три компонента для скроллинга изображений, навигатор для этих компонентов, компоненты для простого отображения изображений, но с намного меньшим мерцанием, чем TImage, а также несколько полезных процедур. Немного, но в дальнейшем я планирую пополнять библиотеку новыми компонентами и процедурами. Уже совсем скоро думаю добавить компонент для отображения эскизов (Thumbnails). 

С помощью этих компонентов намного легче сделать просмотрщик типа ACDSee или IrfanView. И не только. Благодаря им программу можно сделать более удобной, придав ее элементам управления дополнительную функциональность

Image Controls 2.0 

   1. Добавлен компонент TTexturePanel.
   2. В TCustomScrollingImage добавлено масштабирование, а также автоматическое масштабирование по размеру компонента.
   3. Изменена иерархия компонентов для скроллинга, теперь TFastScrollingImage наследуется от TScrollingImage.
   4. Наследники TCustomScrollingImage, а также компоненты TBitmapContainer и TBitmapPanel теперь имеют свойство Transparent, позволяющее делать компонент прозрачным.
   5. Добавлена возможность нестандартной отрисовки изображения в компонентах для скроллинга.
   6. Добавлено изменение курсоров для скроллинга в design-time с помощью свойств ImageCanScrollCursor, ImageDragCursor, ImageScrollDisabled.
   7. В TCustomScrollingImage добавлены свойства RealImagePos, RealImageLeft, RealImageTop, по которым можно узнать настоящие координаты изображения в компоненте, учитывая то, что оно может неполностью заполнять компонент.
   8. Добавлено в TCustomScrollingImage свойство CanScrollWithMouse, позволяющее запретить скроллинг с помощью мыши.
   9. Исправлен глюк в навигаторе при щелчке в нем правой кнопкой мыши.
  10. В модуль ImgCtrlUtils добавлена процедура LoadGraphicToBitmap и немного подправлена функция IsEmptyPicture.
  11. Добавлен модуль ImgCtrlsSkins.
  12. Устранены другие небольшие баги и ошибки.

Добавлено @ 18:20 
Подробнее - в документации
PM MAIL   Вверх
Sportsmen
Дата 3.11.2006, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Скачал, посмотрел. Первое впечатление отличное, что поразило больше всего Help русский!!! А для начинающего програмиста это просто находка. Большое спасибо! smile 
PM MAIL ICQ   Вверх
Snowy
Дата 4.11.2006, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Иссесно хелп русский.
Автор ведь тоже не китаец smile

Добавлено @ 00:35 
ЗЫ. Автор компонента - автор первого поста.
PM MAIL   Вверх
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   Вверх
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   Вверх
Alexeyt
Дата 18.2.2007, 02:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Snowy
хочешь для тестов jpg размером 7200 x 7200 x 24 bpp, в 4 МБайт?

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


Ищущий
*


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

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



ААА!!! Пропустил мессаги все! Отвечаю поздно, ибо не видел!
s-mike
Цитата(s-mike @  31.1.2007,  20:24 Найти цитируемый пост)
 Возможно для OpenGL хранение смасштабированной текстуры изображения и является грамотным подходом. Но не забывай, что для хранения текстуры размером 2048x2048 потребуется более 4 мегабайт памяти. Твой вариант программы с изображением размером 2976x1952 в BMP формате масштабом 410% занимает в памяти более чем 80 мегабайт оперативной памяти и столько же виртуальной.

ЗАЧЕМ мне хранить ОТМАСШТАБИРОВАННУЮ картинку? В OpenGl хранится обычная картинка, никаких изменений масштабов нет, кроме подгонки размера до кратности степени двойки, ибо требование железа такое. Масшабирование происходит на этапе отрисовки - само железо растягивает.
Почему такой размер в оперативке - честно не знаю. Разбираться лень уже. Скорее всего из-за моего плохого знания opengl, наверно где-то что-то надо было удалить после создания текстуры, а где и что - не знаю. Видимо копия текстуры так и валяется в оперативке...
Зато с помощью opengl версии можно рисовать примитивы - рамочки и прочее. На скорость это не повлияет. Да, при больших текстурах тоже тормозит безбожно. в смысле >1024x1024.  Я делал это для проекта, в котором 1024x1024 - предел, поэтому не тестил на больших.
Нда, таки надо было сразу делать с разбивкой текстуры на мелкие квадраты, тада размер бы вообще не имел значения. Мож сделаю, но только когда ты переделаешь компонент - возможность создания своих отрисовщиков добавишь. Тогда лучше на DirectX сделаю - я его лучше знаю.
PM MAIL   Вверх
evstp
Дата 23.12.2007, 03:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Хееех...  Видимо проект совсем заглох =(
Жаль =(((
PM MAIL   Вверх
Coriolis
Дата 24.12.2007, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
*


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

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



Что значит заглох? Компонент вполне юзабельный - бери да используй.
У автора были планы по переработке тотальной - но у все у нас заботы да работы (кушать что-то надо ;) ).  А так заявленный функционал работает на 5, а если надо что-то сверх - это уж самому, конкретно под твою задачу.
PM MAIL   Вверх
ahito1
  Дата 17.5.2009, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо автору за компоненты! У меня вопрос: каким образом можно сделать масштабирование изображения с помощью трэкбара или кнопок "+" и "-"?
PM MAIL   Вверх
Amalthea
Дата 20.2.2012, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Хороший компонент! Спасибо!
Правда при загрузке больших картинок (больше 400 кБайт) открывается либо белый лист, либо искаженная картинка. Использовала TSBScrollingImage. Можно ли исправить?
user posted image

Это сообщение отредактировал(а) Amalthea - 12.4.2012, 12:28
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

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

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

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

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


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

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


 




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


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

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