Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Перенос Graphics на pictureBox


Автор: WolfAlone 16.9.2010, 14:33
Доброго времени суток!

Имеем такую функцию:
Код

public Graphics DrawEllipse()
        {
            System.Drawing.Pen myPen = new System.Drawing.Pen(System.Drawing.Color.Red);
            System.Drawing.Graphics formGraphics;
            formGraphics = this.CreateGraphics();
            formGraphics.DrawEllipse(myPen, new Rectangle(0, 0, 200, 300));
            return formGraphics;
        }

Таких фигур рисуется несколько, для примера я привел одну.

Подскажите пожалуйста, как нанести возвращаемый этой функцией объект типа Graphics поверх фонового изображения в pictureBox?

Автор: CYBERDREAM 16.9.2010, 14:51
Если ты хочешь имея изображение в PictureBox рисовать его фон, то тебе нужно делать в несколько этапов:
Код

Image foreGround;
Image result=new BitMap(pb.Width,pb.Height);

public void DrawIt()
{
    Graphics g = Graphics.FromImage(im);
    g.Clear(Color.Transparent);
               ///рисуешь все что нужно - элипсы, квадраты, ....
              DrawEllipse(g);
    g.DrawImage(fore);
}


//рисовка элипаса должна быть следующей:
Код

DrawEllipse(Graphics g){
//рисуй на графиксе изображения, а не на графиксе формы
}

Автор: WolfAlone 16.9.2010, 15:08
Я наверное не совсем корректно выразился. У меня есть некий pictureBox (пусть будет pictureBox1). В этот pictureBox - загружено изображение (фоном, из JPEG).
Есть объект типа Graphics, на котором нарисованы нужные мне фигуры (эллипсы, линии и пр.), который возвращается функцией DrawEllipse().

Нужно:
То, что возвратила функция (объект типа Graphics) - отрисовать в pictureBox1, поверх фонового изображения (которое туда уже загружено).

P.S. Затем, нужно будет стереть нарисованное мною в PictureBox'e, что бы нарисовать новый набор фигур, не затрагивая при этом фоновое изображение (которое туда загружено из JPEG-изображения).

Автор: CYBERDREAM 16.9.2010, 15:16
в любом случае Графикс ты должен быть не из формы. smile 
я бы сделал так:
Сохраняю изобрежение фоновое в переменную Image back;
Создаю новое изображение с размерами как у back 
Код

Image drawed=new Bitmap(back.Width,back.Height)
;
Каждый рас когда перерисовка делаем:
Код

Graphics g=Graphics.FromImage(drawed);
g.DrawImage(back);
DrawEllipse(g);
g.Dispose();



Добавлено через 1 минуту и 52 секунды
надеюсь я тебя правильно в этот раз понял

Автор: WolfAlone 16.9.2010, 15:55
А если картинка будет достаточно большой, вторая копия фонового изображения - не начнет её сильно отъедать?
-=Я имел в виду оперативку =-

Автор: CYBERDREAM 16.9.2010, 16:01
будешь работать с широкоформатным изображением? может и будет) но я не думаю что сильно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)