У меня есть объект Graphics (форма) с большим рисунком на фоне (читай — рабочий стол с обоями) там же обрисовываются полупрозрачные прямоугольники. При наведении они меняют цвет. Как можно сохранить кусок фона для конкретного прямоугольника, чтобы восстанавливать его при обрисовке заново? Перерисовывать всю картинку гиморно — слишком долго.
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Здравствуйте, in2dark, Вы писали:
I>А если прорисовка фонапроисходит в коде и у меня нет ничего кроме объекта Graphics? Тоесть я нарисовал на форме сложный рисунок кодом, а потом в определённом месте дорисовал объект GraphicsPath со сложной внутренней структурой, как мне его убрать и вернуть начальную кактинку без перерисовки всего изображения? Мне надо сохранить содержимое области под этим объектом и позже вернуть его обратно.
Ну тогда воспользуйся функцией WinApi BitBlt
Тут примерно описано как получить из Graphics нарисованное на нем изображение.
смотри тут
Перед выводом твоего GraphicsPath снимаешь с той части формы изображение, а дальше, когда нужно восстановить фоновый рисунок — просто восстанавливаешь его на место из памяти. Как восстановить я написал выше, просто тебе уже не надо загружать рисунок, он будет в памяти.
Короче сложности составить не должно.
P.S. Ну а если не получиться, тогда напишу тебе пример. А вообще всё это есть в форумах, надо только поискать и немного подумать.
Как я понимаю, полупрозрачные окна в WinXP и выше поддерживаются самой системой. Почему бы не использовать имеющиеся возможности?
мне не окно нудно сделать полупрозрачным, а прямоугольник в нём. Тоесть фон у меня — это фон окна формы
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Вроде можно было выводить картинку по частям, а еще делать Invalidate не всему окну, а только прямоугольнику
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Здравствуйте, in2dark, Вы писали:
I>У меня есть объект Graphics (форма) с большим рисунком на фоне (читай — рабочий стол с обоями) там же обрисовываются полупрозрачные прямоугольники. При наведении они меняют цвет. Как можно сохранить кусок фона для конкретного прямоугольника, чтобы восстанавливать его при обрисовке заново? Перерисовывать всю картинку гиморно — слишком долго.
I>
данное сообщение получено с www.gotdotnet.ru
I>ссылка на оригинальное сообщение
Вывод части Image на форму:
//Загружаем картинку из файла.
Image image = Image.FromFile("1.jpg");
// Создаем объект Graphics для формы.
Graphics grfx = this.CreateGraphics();
// Получаем нужную часть изображения
Rectangle rect = new Rectangle(0, 120, 120, 240);
//Указываем нужные координаты на форме.
Rectangle rect2 = new Rectangle(0, 0, 120, 240);
//Выводим часть изображения в нужные координаты на форме.
grfx.DrawImage(image,rect2,rect, GraphicsUnit.Pixel);
А если прорисовка фонапроисходит в коде и у меня нет ничего кроме объекта Graphics? Тоесть я нарисовал на форме сложный рисунок кодом, а потом в определённом месте дорисовал объект GraphicsPath со сложной внутренней структурой, как мне его убрать и вернуть начальную кактинку без перерисовки всего изображения? Мне надо сохранить содержимое области под этим объектом и позже вернуть его обратно.
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение