IPB
 

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> 2D графика на C#
GonzA
Отправлено: 04.01.2009, 15:04
+Цитировать сообщение


Experienced
****

Группа: Опытный
Сообщений: 503
Регистрация: 27.11.2002
Пользователь №: 101



Привет, народ.
Мне надо нарисавать график на c#. Как это сделать?
Может кто ни будь посоветовать как начать работать с 2D графикой в .net может посоветуете мануал.
 
Перейти в начало страницы
Nox Metus
Отправлено: 04.01.2009, 15:25
+Цитировать сообщение


Patriarch
**********

Группа: Участник
Сообщений: 8714
Регистрация: 18.05.2004
Пользователь №: 2398



Какая задача перед вами стоит? Освоить 2D графику в .NET и построение графика — это просто упражнение. Или вам нужна библиотека построения графиков с автоматическим маштабированием, осями, подписями, легендой,... ?


--------------------
Ich weiß nicht, was du sagest.
 
Перейти в начало страницы
GonzA
Отправлено: 04.01.2009, 21:00
+Цитировать сообщение


Experienced
****

Группа: Опытный
Сообщений: 503
Регистрация: 27.11.2002
Пользователь №: 101



Мне скоро надо будет сделать что то вроди изолиний. Поэтому я решил освоить 2Д графику. Мне надо понять основную концепцию 2Д графики на C#. Я посмотрел имеющиеся классы. Их вроди не много, однако хотелось бы понять основную идею из которой исходят при написание 2д графики. Может есть уже устоявшиеся соглашения, которые надо знать. Хотелось бы найти обзорный мануал, где говорилось бы какие классы есть и чем для чего лудьше пользоваться.
 
Перейти в начало страницы
Eyeless Watcher
Отправлено: 04.01.2009, 23:44
+Цитировать сообщение


Guru
******

Группа: Опытный
Сообщений: 3943
Регистрация: 09.04.2007
Пользователь №: 45663



Как грится, RTFMSDN
Класс Graphics - векторная, Bitmap - растровая. Внутри всё довольно интуитивно понятно.
 
Перейти в начало страницы
Nox Metus
Отправлено: 05.01.2009, 12:28
+Цитировать сообщение


Patriarch
**********

Группа: Участник
Сообщений: 8714
Регистрация: 18.05.2004
Пользователь №: 2398



Цитата(GonzA @ 04.01.2009, 21:00) *
Мне скоро надо будет сделать что то вроди изолиний.
Если исходная задача таки не изучение 2D графики в .NET, то не тратьте времени на ерунду, воспользуйтесь готовыми программными продуктами.


--------------------
Ich weiß nicht, was du sagest.
 
Перейти в начало страницы
BlackCat
Отправлено: 07.01.2009, 12:43
+Цитировать сообщение


Patriarch
**********

Группа: Участник
Сообщений: 6572
Регистрация: 28.05.2005
Из: Кольцово
Пользователь №: 10575



Если ваша задача - визуализация графиков, то недавно вышел компонент MS Chart Control, ставите - интегрируется в VS, к нему есть мануал. Линк брал из блога Скотта Гатри, поищите на msdn.


--------------------
Анноит? Пиши комплейн!
 
Перейти в начало страницы
GonzA
Отправлено: 09.01.2009, 22:42
+Цитировать сообщение


Experienced
****

Группа: Опытный
Сообщений: 503
Регистрация: 27.11.2002
Пользователь №: 101



может кто знает как вывести точку на экран?
 
Перейти в начало страницы
Nox Metus
Отправлено: 10.01.2009, 14:23
+Цитировать сообщение


Patriarch
**********

Группа: Участник
Сообщений: 8714
Регистрация: 18.05.2004
Пользователь №: 2398



Цитата(GonzA @ 09.01.2009, 22:42) *
может кто знает как вывести точку на экран?


Код
[DllImport("user32.dll")]
public static extern int GetDC(int hwnd);

[DllImport("gdi32.dll")]
public static extern int SetPixel(int hdc, int x, int y, int color);


Код
SetPixel(GetDC(0), x, y, ColorTranslator.ToOle(color));


--------------------
Ich weiß nicht, was du sagest.
 
Перейти в начало страницы
VlafF
Отправлено: 12.01.2009, 17:46
+Цитировать сообщение


Veteran
*****

Группа: Участник
Сообщений: 1052
Регистрация: 15.12.2004
Пользователь №: 5609



Насчет использования неуправляемых функций из dll - помоему колега издевается).
Наверное самый простой способ - создать форму или UserControl, переопределить метод OnPaint и в нем нарисовать что нужно используя методы класса Garphics.

Код
protected override void OnPaint(PaintEventArgs e)
{
      Graphics g = e.Graphics;
      g.DrawLine(new Pen(Color.Red), 0, 0, 100, 100);
}


--------------------
Seamos realistas, sonemos lo imposible.
 
Перейти в начало страницы
Nox Metus
Отправлено: 12.01.2009, 19:17
+Цитировать сообщение


Patriarch
**********

Группа: Участник
Сообщений: 8714
Регистрация: 18.05.2004
Пользователь №: 2398



Цитата(VlafF @ 12.01.2009, 17:46) *
Насчет использования неуправляемых функций из dll - помоему колега издевается).

Нисколько. Управляемыми нельзя «вывести точку на экран». А именно таков был вопрос. Кстати, управляемые функции — они тоже в dll все wink.gif.


--------------------
Ich weiß nicht, was du sagest.
 
Перейти в начало страницы
Eyeless Watcher
Отправлено: 12.01.2009, 22:44
+Цитировать сообщение


Guru
******

Группа: Опытный
Сообщений: 3943
Регистрация: 09.04.2007
Пользователь №: 45663



Цитата(Nox Metus @ 12.01.2009, 19:17) *
Цитата(VlafF @ 12.01.2009, 17:46) *
Насчет использования неуправляемых функций из dll - помоему колега издевается).

Нисколько. Управляемыми нельзя «вывести точку на экран». А именно таков был вопрос. Кстати, управляемые функции — они тоже в dll все wink.gif.

Можно, только сначала в битмап, а потом уже битмап на экран. Там даже целый SetPixel() есть.
 
Перейти в начало страницы
Nox Metus
Отправлено: 12.01.2009, 23:02
+Цитировать сообщение


Patriarch
**********

Группа: Участник
Сообщений: 8714
Регистрация: 18.05.2004
Пользователь №: 2398



Цитата(Eyeless Watcher @ 12.01.2009, 22:44) *
Можно, только сначала в битмап, а потом уже битмап на экран. Там даже целый SetPixel() есть.

Даже не знаю с чем вы спорите и стоит ли, собственно, с вами дискутировать. Я всегда точен в высказываниях. Вы и сами себе уже возразили вполне успешно. Нужные ваши слова я выделил. «Вывод точки на экран», «вывод точки в битмап» и «вывод битмапа на экран» — это разные операции. Вполне понятно, что при выводе битмапа точки тоже какие-то выводятся. Но и при рисовании линии они тоже выводятся. И даже круга и эллипса. Даже если вы текст на экран выводите, то он тоже состоит из точек. Эти операции вы же почему-то с «выводом точки» не отождествляете. Странно почему?

Был задан чёткий вопрос, я дал вполне чёткий ответ. Если хотите обходными путями точки выводить, то лучше уж линию из одной точки нарисуйте, чем битмап заводить ради одного пиксела.


--------------------
Ich weiß nicht, was du sagest.
 
Перейти в начало страницы
GonzA
Отправлено: 17.01.2009, 15:04
+Цитировать сообщение


Experienced
****

Группа: Опытный
Сообщений: 503
Регистрация: 27.11.2002
Пользователь №: 101



На самом деле при помощи линии не получится потому что не позволяется выводить линию нулевой длины. В том то и проблемма.
 
Перейти в начало страницы
Nox Metus
Отправлено: 17.01.2009, 17:40
+Цитировать сообщение


Patriarch
**********

Группа: Участник
Сообщений: 8714
Регистрация: 18.05.2004
Пользователь №: 2398



Цитата(GonzA @ 17.01.2009, 15:04) *
На самом деле при помощи линии не получится потому что не позволяется выводить линию нулевой длины. В том то и проблемма.

Нет никакой поблемы. Точка — это, очевидно, линия единичной длины, а не нулевой wink.gif . Просто по умолчанию Pen рисует дополнительную точку на конце, которая называется якорем. Но рисование якоря очень просто отключается:
Код
    private void Form1_Paint(object sender, PaintEventArgs e) {
      Graphics g = e.Graphics;
      g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;
      Pen p = new Pen(Color.Red, 1);
      p.EndCap = System.Drawing.Drawing2D.LineCap.NoAnchor;
      g.DrawLine(p, 10, 10, 11, 10);
    }


и вуаля:


--------------------
Ich weiß nicht, was du sagest.
 
Перейти в начало страницы
GonzA
Отправлено: 17.01.2009, 18:10
+Цитировать сообщение


Experienced
****

Группа: Опытный
Сообщений: 503
Регистрация: 27.11.2002
Пользователь №: 101



Спасибо
 
Перейти в начало страницы

2 страниц V   1 2 >
Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Удалить установленные форумом cookies · Отметить все сообщения прочитанными
RSS Текстовая версия