Skip to main content

Работа с Canvas (Delphi)

Аватар пользователя Shader
Не в сети
Студент
Зарегистрирован: 15.10.2005
Сообщения: 706
Баллы: 729
Работа с Canvas (Delphi)

Innocent Белый "холст"
1) Представьте что на "холсте" нарисован куб (трёхмерный), чёрным цветом
2) Пользователь кликает на области ограниченной кубом (т.е. кликает внутри куба по одной из его граней, мы запоминаем координату X и Y у мышки)
? Нужно получить координаты всех четырёх углов грани, по которой был произведён click?
Вот так:
[attachmentid=2732]

Аватар пользователя Aven
Не в сети
Гражданин
Зарегистрирован: 08.05.2007
Сообщения: 1318
Баллы: 1375
Работа с Canvas (Delphi)

Canvas это 2D рисование, а тебе нужно 3D, гляди в сторну OpenGL или DirectX

Аватар пользователя забыл_пароль
Не в сети
Гражданин
Зарегистрирован: 29.10.2005
Сообщения: 1414
Баллы: 1427
Работа с Canvas (Delphi)

"Avenger" пишет:

Canvas это 2D рисование, а тебе нужно 3D, гляди в сторну OpenGL или DirectX

Может это только пример про куб...

"Shader" пишет:

Innocent Белый "холст"
...

1.Создаешь фигуры (shape) на каждую грань
2.Делаешь ответом на событие OnClick вывод координат этих фигур...

Аватар пользователя Auto11RUS
Не в сети
Активист
Зарегистрирован: 27.09.2005
Сообщения: 2062
Баллы: 2285
Работа с Canvas (Delphi)

"Shader" пишет:

Innocent Белый "холст"
1) Представьте что на "холсте" нарисован куб (трёхмерный), чёрным цветом
2) Пользователь кликает на области ограниченной кубом (т.е. кликает внутри куба по одной из его граней, мы запоминаем координату X и Y у мышки)
? Нужно получить координаты всех четырёх углов грани, по которой был произведён click?
Вот так:
[attachmentid=2732]

Нфига не понял, как можно получить координаты абстрактной фигуры? Если она не абстрактна, то они должны бать тебе извстны, иначе по клику пользователя даже эйнштейн не найдет углы Smile

Аватар пользователя Shader
Не в сети
Студент
Зарегистрирован: 15.10.2005
Сообщения: 706
Баллы: 729
Работа с Canvas (Delphi)

Видимо я не всё расписал:
1) Картинка в виде куба уже есть, т.е. уже нарисована, ну например допустим что в image.picture вы загрузили правильный BitMap, в котором на белом фоне имеется кубик (нарисованный в изометрии, всмыслк трёхмерный)...
2) Теперь нужно узнать координаты углов (точки на bitmap'e которые и являются углами куба)

Задача такая (может так проще понять будет): на image.picure имеется картинка в которой нарисованы большее количество параллелепипидов (я их не рисую они уже кем то созданы до меня), нужно подсветить ребро, внутри которого находиться указатель мыши (это я и сам могу, а вот) и вывести координаты его углов (X,Y)...

Аватар пользователя Auto11RUS
Не в сети
Активист
Зарегистрирован: 27.09.2005
Сообщения: 2062
Баллы: 2285
Работа с Canvas (Delphi)

Ты хочешь написать код по распознанию, мало того, что изображения, но еще чтобы и края находил?
Хех, обычай нейронную сеть Smile

Аватар пользователя забыл_пароль
Не в сети
Гражданин
Зарегистрирован: 29.10.2005
Сообщения: 1414
Баллы: 1427
Работа с Canvas (Delphi)

"diesel" пишет:

Ты хочешь написать код по распознанию, мало того, что изображения, но еще чтобы и края находил?
Хех, обычай нейронную сеть Smile

Какие нейронные сети. НС применяют, чтобы решать многоусловные задачи. В данном случае идёт более простое распознание (ещё проще, чем распознавание букв - которое легко производится без нейронных сетей). Просто не всегда нужно искать решение в программировании, иногда неплохо воспользоваться чисто условиями логики Smile

"Shader" пишет:

...Задача такая (может так проще понять будет): на image.picure имеется картинка в которой нарисованы большее количество параллелепипидов (я их не рисую они уже кем то созданы до меня), нужно подсветить ребро, внутри которого находиться указатель мыши (это я и сам могу, а вот) и вывести координаты его углов (X,Y)...

Если я правильно понял, то ты подсвечиваешь путём замены цвета черных точек, касающихся белой грани. Тогда (раз уж всё равно все точки проходятся) - у угловой точки соседние точки расположены под углом (не 180), а у точек линии соседние точки под развёрнутым углом (как бы линия не располагалась):

[attachmentid=2762]

Если умеешь пользоваться косинусами/синусами, то у тебя всё получится. Хотя если линии толщиной в одну точку, то можно использовать вот что:

[attachmentid=2763]

в этих случаях красная точка является точкой линии (она тебе не нужна), в противном случае - она точка угла.

зы: извеняюсь, если рисунки неочень, но фотошоп было лень запускать B)

Аватар пользователя забыл_пароль
Не в сети
Гражданин
Зарегистрирован: 29.10.2005
Сообщения: 1414
Баллы: 1427
Работа с Canvas (Delphi)

"Shader" пишет:

...
Нет - так как линии могут быть широкими или иметь угол очень близкий к 0 или к 90
...

Тогда предварительно нужно сделать линии тоньше (в отдельном канвасе, чтобы пользователь не видел).

Аватар пользователя SARS
Не в сети
Новенький
Зарегистрирован: 22.12.2005
Сообщения: 72
Баллы: 72
Работа с Canvas (Delphi)

А холст монотонный, т.е. картинка нормального качества (без артефактов)?

Аватар пользователя Shader
Не в сети
Студент
Зарегистрирован: 15.10.2005
Сообщения: 706
Баллы: 729
Работа с Canvas (Delphi)

ДА!

Аватар пользователя SARS
Не в сети
Новенький
Зарегистрирован: 22.12.2005
Сообщения: 72
Баллы: 72
Работа с Canvas (Delphi)

"Shader" пишет:

ДА!

У меня есть идейка, если получится реализовать, напишу Smile

Аватар пользователя Shader
Не в сети
Студент
Зарегистрирован: 15.10.2005
Сообщения: 706
Баллы: 729
Работа с Canvas (Delphi)

"забыл_пароль" пишет:

Тогда предварительно нужно сделать линии тоньше (в отдельном канвасе, чтобы пользователь не видел).

А как я тебе уменьшу толщину линий?

Как закрасить область ограниченную линиями (как в paint)?<br />
Может есть у кого готовые функции...

Не в сети
Новенький
Зарегистрирован: 18.06.2006
Сообщения: 33
Баллы: 37
Работа с Canvas (Delphi)

Как закрасить область ограниченную линиями (как в paint)?<br />
Может есть у кого готовые функции...

Саша у меня где-то был такой код, если найду то напишу.

Аватар пользователя забыл_пароль
Не в сети
Гражданин
Зарегистрирован: 29.10.2005
Сообщения: 1414
Баллы: 1427
Работа с Canvas (Delphi)

ЦитатаКак закрасить область ограниченную линиями (как в paint)?
Может есть у кого готовые функции...
ты чего? такая процедура есть давно -

FloodFill(X,Y:integer;Color:TColor;FillStyle:TFillStyle);</p>
<p>TFillStyle = (fsBorder,fsSurface)

вот на всякий случай пример с исходником:[attachmentid=2960]
левой рисуешь, правой закрашиваешь

Аватар пользователя Catkeen
Не в сети
Новенький
Зарегистрирован: 21.06.2006
Сообщения: 96
Баллы: 97
Работа с Canvas (Delphi)

может проще через классы это реализвать?...

Аватар пользователя Shader
Не в сети
Студент
Зарегистрирован: 15.10.2005
Сообщения: 706
Баллы: 729
Работа с Canvas (Delphi)

"забыл_пароль" пишет:

[code]FloodFill(X,Y:integer;Color:TColor;FillStyle:TFillStyle);

Спасибо...

P/S/ Мне просто интересно (описанной ниже ситуации у меня не возникает, так для общего развития): А что если внутреннее, подлежащее закрашиванию, пространство состоит из смеси цветов: скажем R (+ - 10) G (+ - 10) B (+ - 10)?

Аватар пользователя забыл_пароль
Не в сети
Гражданин
Зарегистрирован: 29.10.2005
Сообщения: 1414
Баллы: 1427
Работа с Canvas (Delphi)

Если я правильно понял - ты хочешь делать, как в фотошопе, чтобы приближенные цвета тоже закрашивались... Если да, то тебе надо создать набор схожих цветов, а при закрашивании самому двигаться по всем точкам удовлетворяющим условию цвета (во все стороны) и перекрашивать их в один (тут рекурсия поможет).

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".