Xpoint
   [напомнить пароль]

Работа с PictureBox'ами в C#

Метки: [без меток]
2009-06-23 11:42:54 [обр] NaN[досье]
Задача: Необходимо построить сложную схему. Фрагменты этой схемы подгружаются из БД или из пользовательского файла как изображения (*.bmp). Потом пользователь может перемещать их, рисовать линии между ними и т.п. А результат работы должен быть сохранен в БД и/или в файл.
Решение в лоб - под каждый новый фрагмент создается свой PictureBox, их перетаскивание не сложно и с прорисовкой проблем нет.
В результате мы получаем некоторое множество PictureBox'ов, добавленных как Controls в процессе работы на фоновый для них PictureBox, на котором нарисованы линии. Но как из всего этого получить единый объект Image (включающий как содержимое фонового PictureBox'а, так и содержимое добавленных на него PictureBox'ов), который может быть легко сохранен?
Возможно, есть какое-либо другое решение?
Заранее благодарю.
спустя 4 часа 29 минут [обр] Филипп Ткачев(1/112)[досье]
Не знаю C#, а есть в нем какой-нибудь объект позволяющий рисовать линию между двумя точками?
А на фоновый PictureBox ведь можно каким-то методом наложить рисунок из внешнего файла в точку с определенными координатами.
спустя 1 минуту [обр] Филипп Ткачев(1/112)[досье]
А вот и пример
спустя 22 минуты [обр] NaN[досье]

Такой объект есть, Graphics (метод DrawLine). Проблема не в линиях.
Если работать с одним PictureBox'ом, то можно наложить картинку на какую-то его часть. Но как перетаскивать эту часть PictureBox'a? С отдельными все понятно - это объекты, у них есть координаты Х и У, которые можно изменять. А как быть с множеством изображний, загруженных в один PictureBox?

P.S. В примере, кстати, тоже несколько PictureBox. Если говорить об этой задаче на его основе, то как сохранить в файл изображение, состоящее (склееное) из этих 4 картинок?

спустя 3 часа 21 минуту [обр] NaN[досье]

Как все, оказывается, просто в этом мире.
Можно создать другой PictureBox и использовать команду CopyFromScreen,
а потом сохранять Image от него.

Graphics g = Graphics.FromHwnd(pictureBox3.Handle);
g.CopyFromScreen(this.Left+8, this.Top+29, 0, 0, new Size(430, 279), CopyPixelOperation.MergeCopy);

Проблема решена.

Powered by POEM™ Engine Copyright © 2002-2005