![]() |
|
Модераторы: Snowy, Alexeis, MetalFan |
![]()
|
|
| Amalthea |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 9.11.2010 Репутация: нет Всего: нет |
Здравствуйте!
Только начала изучать Делфи7. Не нашла информации на сайте. Решила спросить. У меня есть дочерняя форма с компонентом TImage с загруженной картинкой, которая по размерам полностью вписывается в форму. ClientHeight/Whidth доч.формы сделала равными 80% от ClientHeight/Whidth главной формы (но это не суть). Как увеличить/уменьшить фрагмент интересующий части изображения TImage (с помощью колесика на мышке), чтобы ClientHeight/Whidth оставался прежним (те же 80% от родит.формы)? Как изображено на картинках ниже. ![]() Я так понимаю надо использовать OnMouseWheel. А как, не могу найти. ![]() И в идеале еще нужно создать инструмент Лупа для увеличения, уменьшения фрагментов картинки. ![]() Спасибо. |
|||
|
||||
| Illusion Dolphin |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 13 Всего: 63 |
Пробовали заглянуть в шапку раздела http://forum.vingrad.ru/forum/topic-45912/...e-controls.html ?
-------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
| Amalthea |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 9.11.2010 Репутация: нет Всего: нет |
Спасибо, посмотрю
|
|||
|
||||
| DimaDD |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 29.11.2011 Репутация: нет Всего: нет |
Воспользуйтесь событием OnMouseWheel той формы, на которой лежит TImage, в его обработке и реализовывайте масштабирование.
Хороший доп. вариант ещё - поместить TImage не прямо на форму, а на ScrollBox, занимающий всю клиентскую область. Тогда при слишком большой картинке будут появляться полосы прокрутки (для них лучше свойства Tracking и Smooth сделать True). Но тогда же и колёсико мыши станет не масштабировать, а двигать бегунки полос (т.е. ScrollBox будет перехватывать события от колёсиков). Для учёта таких случаев можно сделать масштабирование не одним только колёсиком, а, например, сочетанием "колёсико+Ctrl": просто в обработчик OnMouseWheel формы (не ScrollBox'а) надо добавить проверку:
Тут вместо ZoomOut и ZoomIn должны быть Ваши масштабирующие процедуры. |
|||
|
||||
| kozerog |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 2.3.2012 Репутация: нет Всего: нет |
Спасибо большое, я тоже буду пробовать.
|
|||
|
||||
| Amalthea |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 9.11.2010 Репутация: нет Всего: нет |
Воспользовалась Вашей библиотекой компонент Image Controls 2.0 (хорошая библиотека, спасибо!), а именно компонентой TScrollingImage. Рисую сетку долгот и широт на карте:
![]() Затем начинаю масштабировать картинку, и сетка начинает выглядеть следующим образом (часть линий не прорисовывается): ![]() Кто-нибудь знает, как решается данная проблема, есть ли способы? И еще одна проблема. Когда открываю карту большого размера, например 6521x3261 px, получается такая 'красота' (рис. ниже), линии и цвета искажаются, а если карта размера 3260x1630, то открывается в нормальном виде через раз, если карта такого же размера, но в градациях серого, то все отображается прекрасно. ![]() С чем это может быть связано? И еще один вопрос. Мне на карту нужно наложить некоторые полупрозрачные области (тень на Земле) можно ли установить прозрачность пикселов или таких возможностей нет в Delphi? Нашла только как сделать прозрачной форму. Спасибо! Это сообщение отредактировал(а) Amalthea - 12.4.2012, 12:29 |
|||
|
||||
| Illusion Dolphin |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 13 Всего: 63 |
"часть линий не прорисовывается" - это потому что используется алгоритм Nearest для изменения масштаба. Как писал автор:
Но если нужно качественное, то есть событие OnScaleImage, где можно как угодно масштабировать изображение. Тут я Вам также рекомендую искать слово SmoothResize . На счёт карты искажённой - тут хорошо бы видеть сам файл, такое ощущение что он не 24 bit RGB. Например, JPEG может быть в CMYK - и делфи до последнего времени это не поддерживало (xe2 - полёт нормальный). -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
| Amalthea |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 9.11.2010 Репутация: нет Всего: нет |
Illusion Dolphin спасибо,
поищу событие OnScaleImage. Насчет карты, она у меня в цветовой модели RGB, 8 bit, с расширением jpg и bmp. Открывала их в фотошопе, тоже часть сетки пропадает при уменьшения масштаба. Если толщину линий делать толще (>1 px), то конечно лучше отображается. А по поводу полупрозрачных областей. Можно ли установить прозрачность пикселов или таких возможностей нет в Delphi? Нашла только как сделать прозрачной форму. Вы об этом что-нибудь слышали? |
|||
|
||||
| Illusion Dolphin |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 13 Всего: 63 |
Можно ли установить прозрачность пикселов или таких возможностей нет в Delphi?
Всё можно. Скорее всего Вам надо полупрозрачное рисование. Детальнее опишите задачу я тогда расскажу что надо делать. Если нарисовать на карте что-нибудь полупрозрачное то тут можно или ручками для старых делфи (http://forum.vingrad.ru/topic-28975.html) или через canvas для новых версий делфи. P.S. картинка с наклоном - там идёт смещение битов, обычно такое бывает когда 32 битная картинка читается как 24 бита. Возможно где-то не установлен Bitmap.PixelFormat := pf24Bit. -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
| Amalthea |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 9.11.2010 Репутация: нет Всего: нет |
Спасибо за помощь!
У меня Delphi 7.0. Использую компонент TScrollingImage. Загружаю в него картинку в растровом формате jpg или bmp. Причем проверяла в фотошопе, они у меня RGB, 8 bit. Т.е. мне их перевести в 24 битные? Кстати, можно загружать в Delphi картинки в векторном формате, например cdr? Рисую сетку долгот и широт таким образом: ScrollingImage1.Picture.Canvas.MoveTo(0, Sh); ScrollingImage1.Picture.Canvas.LineTo(ScrollingImage1.Picture.Width, Sh); Затем надо наложить поверх карты полупрозрачную область (тень на Земле). Скорей всего мне нужно полупрозрачное рисование, как вы написали и лучше узнать как это делается через Сanvas для новых версий Delphi. Если мои картинки не 24 бит, то они не будут нормально отображаться в Delphi 7.0 пока не установлю: Bitmap.PixelFormat := pf24Bit. Так? Еще вопрос. Откуда вы черпаете столько нужной информации по Delphi. Во всех книжках, что я читала все написано поверхностно, больше для начинающих. Может посоветуете, что почитать? |
|||
|
||||
| Illusion Dolphin |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 13 Всего: 63 |
Если надо рисование прозрачное - может быть лучше будет поставить XE2 .
24 бита это 3 канала (R,G,B) каждый по 8 бит итого 24. "Кстати, можно загружать в Delphi картинки в векторном формате, например cdr?" - cdr навряд ли Вы найдёте, но можно поискать на torry.net для начала. Сетку правильнее будет рисовать в момент OnScaleImage тогда не будет проблем с масштабом. В это событии надо пересчитать координаты и нарисовать часть сетки для текущего масштаба. Полупрозрачную область можно наложить в том же OnScaleImage. Для XE2 можно загрузить 32 битную картинку в pngimage, к примеру, и потом отрисовать (Canvas.Draw) на изображении сформированном в OnScaleImage с учётом пересчёта масштаба. Чтобы не было проблем с форматом - грузите катинки так:
Это сообщение отредактировал(а) Illusion Dolphin - 14.4.2012, 09:52 -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
| Amalthea |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 9.11.2010 Репутация: нет Всего: нет |
Спасибо за советы!
Но проблему с искаженным отображением картинки так и не удалось решить, ваш пример не помог. Значит дело не в битах? В итоге удалила те карты, что плохо отображались. Теперь проблем нет, а вопрос остается открытым. Может это связано с отрисовкой через OpenGL, т.к. я использую компонент TScrollingImage? В случае масштаба, думаю так оставить (OnScaleImage не использую, т.к. есть OnZoom), тем более, если даже в фотошопе при уменьшении масштаба этой же картинки с сеткой, часть линий тоже как бы исчезает. А куда мне до разработчиков фотошопа |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 1 Всего: 88 |
почему бы не использовать emf(метафайлы)?
это сохранённая последовательность вызовов функций рисования, то есть по сути вектор -------------------- Обижено школьников: 8 |
|||
|
||||
| Amalthea |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 9.11.2010 Репутация: нет Всего: нет |
У меня есть карты в формате emf. Только как их правильно открывать? Я делала так, но похоже не правильно, они не отображаются.
|
|||
|
||||
| bems |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 1 Всего: 88 |
Зачем загружать в битмап, это же даст тот же растр
как-то так
масштабирование
-------------------- Обижено школьников: 8 |
||||
|
|||||
![]()
|
| Правила форума "Delphi: Звук, графика и видео" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |