Помощь - Поиск - Пользователи - Календарь
Полная версия: Поворот TImage на угол
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
Unconnected
Привет smile.gif

Вопрос, как можно повернуть TImage на определённый угол? Сразу говорю, не картинку в TImage, а сам TImage(вместе с картинкой)). Вообще, возможно такое? Я находил код для поворота битмапа, но сам TImage не поворачивался, а освободившиеся области заливались заданным цветом.
volvo
SetGraphicsMode Function + SetWorldTransform Function дают аналогичный результат. Можно попробовать установить для канвы TImage желаемую матрицу поворота, и потом перерисовать изображение, находящееся в TImage. по идее оно должно повернуться на заданный матрицей угол.

Хотя для невизуального компонента, каким является TImage - какая бы разница, крутить его самого или изображение, которое в нем находится?
Цитата
Я находил код для поворота битмапа, но сам TImage не поворачивался,
Как ты собственно определил, поворачивался ли у тебя TImage или нет?
Unconnected
Цитата
Хотя для невизуального компонента, каким является TImage - какая бы разница, крутить его самого или изображение, которое в нем находится?


Может, и невизуальный, но ведь можно для него установить Width и Height? В моём понимании TImage все таки имеет форму прямоугольной рамки. Когда пробовал поворачивать битмап, получалось такое:
Нажмите для просмотра прикрепленного файла

Вот по чёрным областям я и определил.. Да и например когда с ToolPallete кидаю на форму TImage, то он прямоугольный, и повернуть нельзя.

Мне это нужно для того, чтобы можно было "крутить" имаджи и совмещать их, сделать что-то типа механизма "прилипания".
volvo
Говорю сразу: крутить компонент нельзя (это чтоб потом не говорил, что много времени потратил, а ничего не получается), можно крутить только содержимое этого компонента.

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

Unconnected
Я находил и правильный, компонент - там получалось так же, как на твоём скрине - но у меня с ним были проблемы небольшие. Но раз компонент крутить нельзя, то как можно сделать "прилипание", т.е. как для картинки узнавать границу соседней картинки, и чтобы она была параллельна границе этой картинки? Может, получать цвет точек и ориентироваться по нему?
volvo
Цитата
Я находил и правильный, компонент - там получалось так же
Я не использую сторонние компоненты. Это одна-единственная процедура. Грести сотни недочетов/багов/недоделок из-за того, что какой-то компонентописатель быстро слабал свое поделие и выбросил его в сеть - мне не очень хочется. Быстрее будет обработать то, что надо, процедурой, и отрисовать заново стандартным компонентом, но потом не думать, что в самый ответственный момент что-нибудь перекосится, где-нибудь зальет не тем цветом, или вообще из-за другой версии Windows вылетит с ошибкой.

Цитата
Может, получать цвет точек и ориентироваться по нему?
Может быть. Не зная, что именно тебе надо, по тем отрывочным сведениям, которые те даешь - я ничего не могу советовать.
Unconnected
Цитата
Это одна-единственная процедура

Я второй раз тоже пробовал процедурой, вот этой.
Цитата

Не зная, что именно тебе надо, по тем отрывочным сведениям, которые те даешь - я ничего не могу советовать.


Ну, на форме есть имаджи, их можно таскать мышкой. Нужно, чтобы можно было их поворачивать и комбинировать, например так:
Нажмите для просмотра прикрепленного файла

Углы поворота имаджей будут равны, или примерно равны..
volvo
В таком случае - это совсем не простая задача. Еще и потому, что:

Нажмите для просмотра прикрепленного файла
Понимаешь, в чем дело, да? smile.gif "Пустая" часть большого изображения наедет на границу малого изображения раньше, чем эти границы совпадут... Картинка будет искажена. Тут я бы смотрел в сторону чистого WinAPI и регионов (вот регионы-то могут быть любой формы). В крайнем случае - вот это глянь:
http://www.delphisources.ru/pages/faq/base..._any_shape.html
, возможно оно тебя натолкнет еще на какую идею. Меня сразу вот так ни на что, кроме "повернуть изображение как надо, запаковать его в регион - в смысле, отрезать все лишние углы - и работать именно с полученным регионом" не хватило. Подумаю еще, может что и придумается. Единственная проблема - я не помню, чтоб была готовая функция проверки, пересекаются ли 2 региона. А хранить для такого региона еще и его границы в каком-либо виде (и потом проверять, а не совпадает ли какая граница одной области с границей другой) - с ума сойдешь это все обрабатывать... Также надо посмотреть в сторону GDI+, там много чего есть для работы с графикой, может и для твоей задачи чего найдется. Про OpenGL пока даже думать не хочется... Хотя...

Откуда задачка-то? Игру какую-то пишешь? Что-то типа Puzzle?
Unconnected
Цитата
Понимаешь, в чем дело, да?


Да, действительно. У меня тоже была мысль хранить координаты границ всех имаджей, но это кажется действительно ресурсоёмко будет, при малейшем перемещении всё пересчитывать и проверять.
Копаться с регионами (и тем более с OpenGl) неохота, т.к. не критично сделать проще. Думаю, достаточно будет поворотов на 90о.. (это я уже знаю, как делать)
Цитата

Откуда задачка-то?


Нет, не игру, хотя отдалённо похоже) Это будет заготовка для программы, моделирующей дорожный трафик..
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.