Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2009, 15:12   #11
balamut
Пользователь
 
Регистрация: 05.02.2009
Сообщений: 35
По умолчанию

честно говоря не вери понял но наверное e.Graphics;
вот код процедуры для рисования на форме:
Код:
protected override void OnPaint(PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            cs.ChartArea = this.ClientRectangle;  //заполняем область формы;
            AddData();          // добавляем точки;
            SetPlotArea(g);     // устанавливаем прямоугольную область на форме в которой строим график;
            cs.AddChartStyle(g);// создаем стиль кривой;
            dc.AddLines(g, cs); //соединяем точки кривой;
            g.Dispose();
        }

Последний раз редактировалось MaTBeu; 18.04.2009 в 09:54.
balamut вне форума Ответить с цитированием
Старый 17.04.2009, 16:42   #12
balamut
Пользователь
 
Регистрация: 05.02.2009
Сообщений: 35
По умолчанию

Код:
protected override void OnPaint(PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            cs.ChartArea = this.ClientRectangle;  //заполняем область формы;
            AddData();          // добавляем точки;
            SetPlotArea(g);     // устанавливаем прямоугольную область на форме в которой строим график;
            cs.AddChartStyle(g);// создаем стиль кривой;
            dc.AddLines(g, cs); //соединяем точки кривой;
            g.Dispose();    //разрушаем объект;
        }

Последний раз редактировалось MaTBeu; 18.04.2009 в 09:53.
balamut вне форума Ответить с цитированием
Старый 18.04.2009, 05:05   #13
akasex
Форумчанин Подтвердите свой е-майл
 
Аватар для akasex
 
Регистрация: 31.03.2008
Сообщений: 179
По умолчанию

try this...

Код:
protected override void OnPaint(PaintEventArgs e)
{
       Bitmap bTemp = new Bitmap(this.Width, this.Height);
       Graphics g = Graphics.FromImage(bTemp);
       g.FillRectangle(new SolidBrush(this.BackColor), 
                           new Rectangle(0, 0, this.Width, this.Height));
       //Drawing on Bitmap
       cs.ChartArea = this.ClientRectangle; //заполняем область формы;
       AddData(); // добавляем точки;
       SetPlotArea(g); // устанавливаем прямоугольную область 
                               на форме в которой строим график;
       cs.AddChartStyle(g);// создаем стиль кривой;
       dc.AddLines(g, cs); //соединяем точки кривой;

       //Saving Bitmap
       bTemp.Save("test3.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
       //Drawing on form
       Graphics gr = e.Graphics;
       gr.DrawImage(bTemp, new Point(0, 0));
       gr.Dispose();
       g.Dispose();
       bTemp.Dispose();
}
akasex вне форума Ответить с цитированием
Старый 18.04.2009, 15:23   #14
balamut
Пользователь
 
Регистрация: 05.02.2009
Сообщений: 35
По умолчанию

to akasex:
спасибо огромное, когда код вставил в onPaint все получилось-картинка сохранилась в файл test3.bmp, а вот когда вставляю его в обработчик события для кнопки - то опять сохраняет черный квадрат: может можно как то этот рисунок сохранить в буфер сначала, а потом оттуда уже в нужный мне файл: мне просто нужно сохранить в файлы различных форматов, то есть как я понимаю использовать компонент saveFileDialog.
balamut вне форума Ответить с цитированием
Старый 19.04.2009, 01:07   #15
akasex
Форумчанин Подтвердите свой е-майл
 
Аватар для akasex
 
Регистрация: 31.03.2008
Сообщений: 179
По умолчанию

Код:
public class Form1
{
....
       private Bitmap buffer; 
....
public Form1()
{
       buffer = new Bitmap(this.Width, this.Height);
}

protected override void OnPaint(PaintEventArgs e)
{
       Graphics g = Graphics.FromImage(buffer);
       g.FillRectangle(new SolidBrush(this.BackColor), 
                           new Rectangle(0, 0, this.Width, this.Height));
       //Drawing on Bitmap
       cs.ChartArea = this.ClientRectangle; //заполняем область формы;
       AddData(); // добавляем точки;
       SetPlotArea(g); // устанавливаем прямоугольную область 
                               на форме в которой строим график;
       cs.AddChartStyle(g);// создаем стиль кривой;
       dc.AddLines(g, cs); //соединяем точки кривой;

       //Drawing on form
       Graphics gr = e.Graphics;
       gr.DrawImage(buffer, new Point(0, 0));
       gr.Dispose();
       g.Dispose();
}

public void buttonSave_Click()
{
       buffer.Save("test3.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
}

public void Form1_OnClose()
{
      buffer.Dispose;
}

...
}
akasex вне форума Ответить с цитированием
Старый 19.04.2009, 13:57   #16
balamut
Пользователь
 
Регистрация: 05.02.2009
Сообщений: 35
По умолчанию

извиняюсь заранее, что туплю: а как мне это привязать к SaveFileDialog, то есть что-то типа такого (хотя здесь выдает ошибку,так как я понимаю filename это не имя файла, а полный путь к нему):
Код:
public void button3_Click(object sender, EventArgs e)

        {
            
            // Установка начальной папки.
            saveFileDialog1.InitialDirectory = "C:\tmp";
            // Задание возможных расширений для файла.
            saveFileDialog1.Filter = "jpeg |*.jpeg; |bmp| *.bmp; |tiff|*.tiff; |All files|*.*";
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                // Код по сохранению...
              string fileName = saveFileDialog1.FileName;
                // ...
            }
            buffer.Save(fileName, System.Drawing.Imaging.ImageFormat.Bmp);
           
        }

Последний раз редактировалось MaTBeu; 20.04.2009 в 14:30.
balamut вне форума Ответить с цитированием
Старый 21.04.2009, 09:43   #17
akasex
Форумчанин Подтвердите свой е-майл
 
Аватар для akasex
 
Регистрация: 31.03.2008
Сообщений: 179
По умолчанию

Код:
using (SaveFileDialog dlgSave = new SaveFileDialog())
            {
                dlgSave.Filter = "PNG Image (*.png)|*.png|JPEG Image (*.jpeg)|*.jpeg|Bitmap Image (*.bmp)|*.bmp";
                if (dlgSave.ShowDialog() == DialogResult.OK)
                {
                    string fileName = dlgSave.FileName;
                    System.Drawing.Imaging.ImageFormat format = System.Drawing.Imaging.ImageFormat.Bmp;

                    switch (dlgSave.FilterIndex)
                    {
                        case 0:
                            format = System.Drawing.Imaging.ImageFormat.Png;
                            break;
                        case 1:
                            format = System.Drawing.Imaging.ImageFormat.Jpeg;
                            break;
                        case 2:
                            format = System.Drawing.Imaging.ImageFormat.Bmp;
                            break;
                    }

                    buffer.Save(fileName, format);
                }
            }
akasex вне форума Ответить с цитированием
Старый 22.04.2009, 02:51   #18
balamut
Пользователь
 
Регистрация: 05.02.2009
Сообщений: 35
По умолчанию

to akasex;
thank you very much/ твои решения мне очень помогли!!!
balamut вне форума Ответить с цитированием
Старый 22.04.2016, 11:11   #19
PeterBr
Новичок
Джуниор
 
Регистрация: 17.04.2016
Сообщений: 1
По умолчанию

тут пример правда для Java, но в самом классе рисующий параболу, гиперболу, и линию - только стандартные СИ команды которые подойдут для любого си-подобного языка

http://ivarious.com/index.php?onecat...B8%D0%B5&id=54

Код:
public class eventbut implements ActionListener{

    @Override
    public void actionPerformed(ActionEvent arg) {

        AbstractButton aButton = (AbstractButton) arg.getSource();
        String s=aButton.getText();
        scale.positioncenterscale(s);
        Graph_26_02.repaintf();
    }
}

public class scale extends JPanel {

    static boolean line=false;
    static boolean parabola=false;
    static boolean hiperbola=false;
    static int centerx=400;
    static int centry=400;
    static int step=15;
    static int step_line=1;
    static int count_step=0;
    static int scale_func=100;

    public void paint(Graphics g){
        System.out.println(step_line);
        gradient_func(g);
        g.setColor(new Color(0,255,0));
        if(line)
            g.drawString("Line", 50, 50);
        if(parabola)
            g.drawString("Parabola", 50, 70);
        if(hiperbola)
            g.drawString("Hiperbolaa", 50, 90);
        scale_div(g);

        if(parabola)
            parabola (g);
        if(hiperbola)
            hiperbola (g);
        if(line)
            line(g);

        graph_border(g);

    } public static void scale_div(boolean arg){
        if(arg){
            step+=5;
        }
        else if (arg==false){
            step-=5;
        }}

    public static void reset(){

        centerx=400;
        centry=400;
        step=5;
        count_step=0;
        scale_func=100;

    }

    public static void positioncenterscale(String arg){
        switch(arg){
            case "zoom +":scale.scale_div(true);scale_func++;break;
            case "zoom -":scale.scale_div(false);scale_func--;break;
            case "<<":centerx+=step;break;
            case ">>":centerx-=step;break;
            case "top":centry+=step;break;
            case "down":centry-=step;break;
            case "vertex -":step_line+=5;break;
            case "vertex +":if(step_line>5)step_line-=5;break;
            case "reset":reset();break;
            case "Line":if(line==true)line=false;else line=true;break;
            case "Parabola":if(parabola==true)parabola=false;else parabola=true;break;
            case "Hiperbola":if(hiperbola==true)hiperbola=false;else hiperbola=true;break;

        }
    }

    public void gradient_func(Graphics g)
    { int gradient=20;
        for(int i=3;i<=797;i++)
        {
            gradient+=(i/6);
            g.setColor(new Color(gradient,gradient,gradient));
            g.drawLine(3,i,796,i);
            gradient=10;
        }
    }

    public void graph_border(Graphics g){
        g.setColor(new Color(255,255,255));
        g.drawLine(0,0,800,0);
        g.drawLine(0,0,0,800);
        g.drawLine(800,0,800,800);
        g.drawLine(0,800,800,800);

        g.setColor(new Color(190,190,190));
        g.drawLine(1,1,799,1);
        g.drawLine(1,1,1,799);
        g.drawLine(799,1,799,799);
        g.drawLine(1,799,799,799);
        g.setColor(new Color(0,0,0));
    }
    public void parabola (Graphics g){
        int x0=0;
        int y0=(x0*x0);
        int x1=1;
        int y1=x1*x1;

        g.setColor(new Color(255,150,150));
        for(;(centry-y1)>=0;)
        {g.drawLine(centerx+x0,centry-y0,centerx+x1,centry-y1);
            g.drawLine(centerx-x0,centry-y0,centerx-x1,centry-y1);
            x0=x1;
            y0=y1;
            x1+=step_line;
            y1=x1*x1/scale_func;}
    }
    public void hiperbola (Graphics g){
        int x0=0;
        int y0=(x0*x0*x0);
        int x1=1;
        int y1=x1*x1*x1;

        g.setColor(new Color(0,255,255));
        for(;(((centry-y1)>=0)||((centry+y1)<=800));)
        {g.drawLine(centerx+x0,centry-y0,centerx+x1,centry-y1);
            g.drawLine(centerx-x0,centry+y0,centerx-x1,centry+y1);
            x0=x1;
            y0=y1;
            x1+=step_line;
            y1=x1*x1*x1/(scale_func*30);}
    }
    public void line (Graphics g){
        int x0=0;
        int y0=x0;
        int x1=1;
        int y1=x1;

        g.setColor(new Color(255,200,255));
        for(int i=0;i<100;i++)
        {g.drawLine(centerx,centry,centerx+x1,centry-y1);
            g.drawLine(centerx,centry,centerx-x1,centry+y1);
            x0=x1;
            y0=y1;
            x1+=100;
            y1=x1;}

    }
    public void scale_div(Graphics g){
        if(step==0)
            step=1;
        g.drawLine(centerx,centry,centerx,0);//.....center-top
        for(int i=0; i<=(centry/step);i++){ g.drawLine(centerx-2,centry-count_step,centerx+2,centry-count_step);
            count_step+=step;
        }
        count_step=0;
        g.drawLine(centerx,centry,800,centry);//.....center-right
        for(int i=0; i<=((800-centerx)/step);i++){
            g.drawLine(centerx+count_step,centry-2,centerx+count_step,centry+2);
            count_step+=step;
        }
        count_step=0;
        g.drawLine(centerx,centry,centerx,800);//....center-down
        for(int i=0; i<=((800-centry)/step);i++){
            g.drawLine(centerx-2,centry-count_step,centerx+2,centry-count_step);
            count_step-=step;
        }
        count_step=0;
        g.drawLine(centerx,centry,0,centry);//center-left
        for(int i=0; i<=(centerx/step);i++){
            g.drawLine(centerx+count_step,centry-2,centerx+count_step,centry+2);
            count_step-=step;
        }
        count_step=0;
    }
}

Последний раз редактировалось Alex11223; 22.04.2016 в 12:23.
PeterBr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построить график функции Horknee Паскаль, Turbo Pascal, PascalABC.NET 15 23.09.2008 09:50
График функции Леха Общие вопросы Delphi 18 16.04.2007 20:50