-
Здравствуйте, вот такой вопрос у меня:
У Canvas есть много графических примитивов (линия, круг, сектор, эллипс итд). Как отрисовать данные примитивы попиксельно, те получить координаты пикселей, что отрисованы через эти команды.
Алгоритмы, ссылки приветствуются...
-
1. Они и так рисуются пикселями. Оптимизированными алгоритмами. Хотя в случае GDI32 какими-то косоптимизированными, но уж что есть.
2. Нахрена вообще нужны координаты пикселей? Вы явно не с того конца решаете задачу, надо не молоток забивать гвоздём, а наоборот.
-
Я явно с того конца начал задачу, пишется управляющая программа для станка с ЧПУ...
-
Что такое ча-па-у? Загуглил, но абсолютно непонятно зачем "программному управлению" понадобились "пиксели". Задача-то какая по сути?
Вам тут либо Canvas/Растровое не нужно, либо "получать координаты" не нужно.
-
> Как отрисовать данные примитивы попиксельно, те получить
> координаты пикселей, что отрисованы через эти команды.
> Алгоритмы, ссылки приветствуются...
RTFM: Path functions, regions
-
An a Student если вы что-то не поняли. то это сугубо ваше дело...
я еще раз говорю... нужнополучить координаты... Игорь, спс буду смотреть...
Для остальных... вопрос остается открытым...
-
Если там некий станок - ему нужны векторные координаты, которые у вас и так есть (собственно по которым всё и рисуется на Canvas).
Но если нужна композиция - то это уже математически решается, пиксели тут не при чём.
А гарантированно узнать что было по факту нарисовано API функциями - можно только вручную проверяя что изменилось на битмапе. Или самому рисовать, без API, по неким сторонним алгоритмам.
-
Игорь, как получить доступ до всех координат пикселей региона? Что-то я не нашел функции...
-
>Или самому рисовать, без API, по неким сторонним алгоритмам.
Я о них и спрашиваю!
-
novai (18.12.16 16:25)
[5] Как-то так в нулевом приближении:
var
Rgn: HRGN;
...
BeginPath (Canvas.Handle);
Canvas.Ellipse (...);
EndPath(Canvas.Handle);
Rgn := PathToRegion (Canvas.Handle);
GetRegionData (Rgn, ....);
DeleteObject(Rgn);
-
Спасибо, буду разбираться...
-
-
Смысл в регионах? С таким же успехом можно пиксели на монохромном битмапе перебирать после рисования...
-
>Регион из битмапа можно. Наоборот вроде нету такого.
Где я говорил про битмап? Не надо фантазий...
-
что-то вообще все не то... может проще метод жука применить к каждому нарисованному примитиву через GDI...
-
Вот:
> как получить доступ до всех координат пикселей региона?
Простые регионы не знаю как устроены, может и списком прямоугольников, а вот сложные регионы это по сути монохромный битмап.
Canvas тоже технически битмап, или заданный постоянный или временный, но всё равно. Пиксели не могут храниться в воздухе. Пиксели = Битмап.
> что-то вообще все не то...
Так может вы всё-таки расскажете что нужно-то получить в итоге? Почему не сунуть в этот чи-пи-йу сами векторные данные? В чём проблема? Что он из себя вообще представляет?
Целочисленные координаты думаю могут понадобиться только если высверливать в доске узор сверлом, которое не может двигаться свободно, а рывками... Иначе бы зачем такие танцы вокруг...
-
будем считать, то это плоттер... нужно отрисовывать примитивы (лиини, круги, полилинии итп) на бумаге...
-
-
гм...
> Плоттеры - это векторные устройства (по крайней мере, по
> входным данным). В первых поколениях этих устройств пишущий
> инструмент перемещался по траектории, заданной отображаемой
> в данный момент фигурой. Плоттер способен рисовать графические
> примитивы:
> * точку;
> * отрезок прямой;
> * дугу;
> * эллипс (окружность как его разновидность);
> * прямоугольник;
> Для плоттеров, которые получают исключительно векторные
> команды рисования, существует несколько различных языков.
> Общепринятым является язык HP-GL, его понимают все плоттеры
> и практически все прикладные программы, выполняющие графический
> вывод на плоттер.
А ваш не понимает базовых команд? Ну а что вам доступно из команд (и уверены ли вы что это действительно всё что он может)?
Или может всё таки проблема в делении перекрывающих/закрывающих друг-друга примитивов на отдельные элементы?
-
ЧПУ логика разрабатывается... хардварно реализована функция MoveTo и все...
-
Короче у вас есть принтер который поддерживает только G-код.
А принтер у вас аддитивный или субтрактивный?
Какова цель работы с пикселями? И почему вы хотите работать с примитивами?
-
> [20] Pavia © (19.12.16 12:04)
> А принтер у вас аддитивный или субтрактивный?
Для результата есть разница? И субстрактивный - на бумаге и прозрачной плёнке который печатает? А аддитивный на чём?
-
Субстрактивный - это тот который срезает лишнее: фрезер, гравёр.
А адитивный это который добавляет, к примеру 3D принтер который печатает пластиком.
Разница есть.
-
> [22] Pavia © (19.12.16 23:36)
> к примеру 3D принтер
Ну как бы да, но всё равно ты мощно загнул.:)
-
> novai (18.12.16 19:16) [19]
> ЧПУ логика разрабатывается... хардварно реализована функция
> MoveTo и все...
Не пойму зачем все так сложно? почему не перебрать все пиксели в bitmap и там где есть пиксель делать MoveTo на устройстве и ставить точку.
-
novai (18.12.16 19:16) [19]
ЧПУ логика разрабатывается... хардварно реализована функция MoveTo и все...
Хи. А что G2 и G3 - круговая интерполяция из CNC команд уже исключили? Странно, на прошлой неделе ещё были.
-
> А что G2 и G3 - круговая интерполяция из CNC команд уже
> исключили? Странно, на прошлой неделе ещё были.
G2 и G3 отсутствовали даже в прошлом году.
а мой чпу ваще не знает о джикоде, странно...
-
-
> Ну и ну (25.12.16 12:27) [27]
> Ах речь идёт о Кулибиных ...
странный вывод.
-
[25]
я о g-code нигде не упоминал...
спасибо за ответы...