@mith

Как Реализовать многослойный canvas с поддержкой прозрачности слоев?

Возникла необходимость реализовать графический редактор с поддержкой слоев и возможности смены их прозрачности.
Примеров растровых редакторов в сети много www.codeproject.com/Articles/22776/WPF-DrawTools , но никто не облает необходимым функционалом.
После изучения материалов по теме выяснилось что , по WinFroms,
- прозрачность доступна только родительской форме
- при смене backgrond сolor с from argb прозрачность не меняется если к панели был прикреплен background Image
- у панелей отсутствует z index расположить их по заданному порядку не получилось

Наверняка я что то пропустил, или, возможно реализация на WPF проще. Прошу подсказать знающим людям.
  • Вопрос задан
  • 2036 просмотров
Решения вопроса 3
newross
@newross
Product owner
Если говорить о WinForms, то там используется GDI+, на котором работа с прозрачностью адский геморой.
У WPF с этим проще, но сколько же ресурсов будет жрать? Все таки в качестве редактора использовать WPF нецелесообразно - на больших проектах будет адово тормозить.

Лучший вариант - DirectX или OpenGL.
Ответ написан
AxisPod
@AxisPod
Канву на DirectX наклепать не просто, а очень просто, на OpenGL думаю так же. Можно к примеру взять SharpDX, SlimDX.

Что потребуется, так это ортогональная проекция, простейшие шейдеры, текстурки и примитивы прямоугольника.

Гляньте туториалы www.rastertek.com/tutdx11.html : 1-5, 11, 12 (хотя так со шрифтами бы не советовал работать), 17, 19. Если вас такой подход устроит, то используйте и не мучайтесь.
Ответ написан
@JuniorNoobie
Сижу в поддержке, пишу мелкие проекты
Можете сами реализовать слои на канвасе. Каждому слою соовтествует свой bmp-файл, где определенный цвет означает прозрачность. Изменения на слое изменяют привязанную к нему матрицу (bmp-файл). Затем просто рисуете эти файлы один поверх другого (слои). Только вот будет очень все это тормозить. OpenGL работает по схожему принципу, но там также используются Снимки слоев, которые хранятся непосредственно в кэше и не перерисовываются.

Вообще, вот построение графического редактора с поддержкой слоев с нуля:
esate.ru/uroki/OpenGL/uroki-OpenGL-c-sharp
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Nipheris
@Nipheris Куратор тега C#
Вам нужно определиться с количеством ресурсов, которое вам доступно. Безусловно, редактор с ядром на opengl будет очень шустрым (вон сейчас фотошоп активно пользуется аппаратным ускорением), но не факт, что вам хватит времени и умения использовать его напрямую.
С другой стороны, вы можете попробовать написать нужные вам обработки самостоятельно, в виде обычного CPU-кода, но без использования WinForms для чего либо, кроме вывода изображения. Вы видимо пытались применить панельки для работы со слоями, это конечно будет крайне неудобно, и многое чего не выйдет. Советую попробовать поработать с этими задачами (смешение слоев, работа с прозрачностью и т.д.) самому, т.е. использоват только один picturebox для вывода готовой картинки.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы