Версия для печати темы
Форум «Всё о Паскале» _ Делфи _ Поворот TImage на угол
Автор: Unconnected 11.04.2010 15:49
Привет
Вопрос, как можно повернуть TImage на определённый угол? Сразу говорю, не картинку в TImage, а сам TImage(вместе с картинкой)). Вообще, возможно такое? Я находил код для поворота битмапа, но сам TImage не поворачивался, а освободившиеся области заливались заданным цветом.
Автор: volvo 11.04.2010 16:15
http://msdn.microsoft.com/en-us/library/dd162977%28VS.85%29.aspx + http://msdn.microsoft.com/en-us/library/dd145104%28VS.85%29.aspx дают аналогичный результат. Можно попробовать установить для канвы TImage желаемую матрицу поворота, и потом перерисовать изображение, находящееся в TImage. по идее оно должно повернуться на заданный матрицей угол.
Хотя для невизуального компонента, каким является TImage - какая бы разница, крутить его самого или изображение, которое в нем находится?
Цитата
Я находил код для поворота битмапа, но сам TImage не поворачивался,
Как ты собственно определил, поворачивался ли у тебя TImage или нет?
Автор: Unconnected 11.04.2010 18:07
Цитата
Хотя для невизуального компонента, каким является TImage - какая бы разница, крутить его самого или изображение, которое в нем находится?
Может, и невизуальный, но ведь можно для него установить Width и Height? В моём понимании TImage все таки имеет форму прямоугольной рамки. Когда пробовал поворачивать битмап, получалось такое:
[attachmentid=8740]
Вот по чёрным областям я и определил.. Да и например когда с ToolPallete кидаю на форму TImage, то он прямоугольный, и повернуть нельзя.
Мне это нужно для того, чтобы можно было "крутить" имаджи и совмещать их, сделать что-то типа механизма "прилипания".
Автор: volvo 11.04.2010 18:43
Говорю сразу: крутить компонент нельзя (это чтоб потом не говорил, что много времени потратил, а ничего не получается), можно крутить только содержимое этого компонента.
Цитата
Вот по чёрным областям я и определил..
Если ты нашел неправильный код вращения битмапа - это не значит, что правильного не существует.
Эскизы прикрепленных изображений
Автор: Unconnected 11.04.2010 18:55
Я находил и правильный, компонент - там получалось так же, как на твоём скрине - но у меня с ним были проблемы небольшие. Но раз компонент крутить нельзя, то как можно сделать "прилипание", т.е. как для картинки узнавать границу соседней картинки, и чтобы она была параллельна границе этой картинки? Может, получать цвет точек и ориентироваться по нему?
Автор: volvo 11.04.2010 19:47
Цитата
Я находил и правильный, компонент - там получалось так же
Я не использую сторонние компоненты. Это одна-единственная процедура. Грести сотни недочетов/багов/недоделок из-за того, что какой-то компонентописатель быстро слабал свое поделие и выбросил его в сеть - мне не очень хочется. Быстрее будет обработать то, что надо, процедурой, и отрисовать заново стандартным компонентом, но потом не думать, что в самый ответственный момент что-нибудь перекосится, где-нибудь зальет не тем цветом, или вообще из-за другой версии Windows вылетит с ошибкой.
Цитата
Может, получать цвет точек и ориентироваться по нему?
Может быть. Не зная, что именно тебе надо, по тем отрывочным сведениям, которые те даешь - я ничего не могу советовать.
Автор: Unconnected 11.04.2010 20:09
Цитата
Это одна-единственная процедура
Я второй раз тоже пробовал процедурой, http://www.delphisources.ru/pages/faq/base/rotate_bitmap2.html
Цитата
Не зная, что именно тебе надо, по тем отрывочным сведениям, которые те даешь - я ничего не могу советовать.
Ну, на форме есть имаджи, их можно таскать мышкой. Нужно, чтобы можно было их поворачивать и комбинировать, например так:
[attachmentid=8742]
Углы поворота имаджей будут равны, или примерно равны..
Автор: volvo 11.04.2010 20:36
В таком случае - это совсем не простая задача. Еще и потому, что:
Понимаешь, в чем дело, да? "Пустая" часть большого изображения наедет на границу малого изображения раньше, чем эти границы совпадут... Картинка будет искажена. Тут я бы смотрел в сторону чистого WinAPI и регионов (вот регионы-то могут быть любой формы). В крайнем случае - вот это глянь:
http://www.delphisources.ru/pages/faq/base/create_controls_with_any_shape.html
, возможно оно тебя натолкнет еще на какую идею. Меня сразу вот так ни на что, кроме "повернуть изображение как надо, запаковать его в регион - в смысле, отрезать все лишние углы - и работать именно с полученным регионом" не хватило. Подумаю еще, может что и придумается. Единственная проблема - я не помню, чтоб была готовая функция проверки, пересекаются ли 2 региона. А хранить для такого региона еще и его границы в каком-либо виде (и потом проверять, а не совпадает ли какая граница одной области с границей другой) - с ума сойдешь это все обрабатывать... Также надо посмотреть в сторону GDI+, там много чего есть для работы с графикой, может и для твоей задачи чего найдется. Про OpenGL пока даже думать не хочется... Хотя...
Откуда задачка-то? Игру какую-то пишешь? Что-то типа Puzzle?
Автор: Unconnected 13.04.2010 0:35
Цитата
Понимаешь, в чем дело, да?
Да, действительно. У меня тоже была мысль хранить координаты границ всех имаджей, но это кажется действительно ресурсоёмко будет, при малейшем перемещении всё пересчитывать и проверять.
Копаться с регионами (и тем более с OpenGl) неохота, т.к. не критично сделать проще. Думаю, достаточно будет поворотов на 90
о.. (это я уже знаю, как делать)
Цитата
Откуда задачка-то?
Нет, не игру, хотя отдалённо похоже) Это будет заготовка для программы, моделирующей дорожный трафик..