Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.59/37: Рейтинг темы: голосов - 37, средняя оценка - 4.59
 Аватар для dreamorder
0 / 0 / 0
Регистрация: 07.10.2012
Сообщений: 60

Нарисовать график с фигурами свечей, свечи должны заливаться градиентом разного цвета

21.12.2012, 11:05. Показов 7264. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток гос-да.
Я только начал осваивать С#, сейчас появилась потребность рисовать.
И вот что интересно, "погуглив" пару часов, ничего не нашёл о том как к примеру использовать GUIPlus в С# !
Задача рисовать график с фигурами свечей, свечи должны заливаться градиентом разного цвета, плюс ещё нужно выводить текст и прямые линии на этом графике, ну и конечно он будет сдвигаться влево.
Помогите пожалуйста с примерами кода. Как рисовать то на С# ?!

P.S. В архиве пример программки как должно быть в итоге. Написал на Autoit, но этот язык создан для ботов.
К стати "бегущая строка" реализована в этом примере тоже с помощью GUI+.
Но к сожалению программа "ломается" через 9-15 минут после старта (где то не хватает памяти наверное).

Вложения
Тип файла: rar Test.rar (614.9 Кб, 47 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.12.2012, 11:05
Ответы с готовыми решениями:

Нарисовать несколько окон разного цвета и разного размера в разных местах
Нарисовать несколько окон разного цвета и разного размера в разных местах.

Графика в паскале. Нарисовать круги разного цвета
Построить 7 кругов разного цвета радиусом 30 пикселей. координаты центров: Х 112 140 189 54 388 421 539 У 39 308 233 163 137 ...

Нарисовать сетку из пересекающихся окружностей разного цвета
Нарисовать сетку из пересекающихся окружностей разного цвета, размером nхn, для n введённого с клавиатуры. На паскале абс. ...

20
 Аватар для dreamorder
0 / 0 / 0
Регистрация: 07.10.2012
Сообщений: 60
22.12.2012, 01:35  [ТС]
форум большой, а толку ноль
целый день тема висит, но почему то никто не ответил, или все кто см. сами не умеют, либо им лень писать

Добавлено через 1 час 11 минут
научился рисовать линии, но всё ещё чувствую себя "обезьяной с клавиатурой",
все примеры и уроки в инете описывают очень малую часть,
ну вот к примеру:

C#
1
2
3
4
5
6
7
8
 private void PaintForm_Paint(object sender, PaintEventArgs e)
 
       {
           Pen pen = new Pen(Color.Red,5);
            e.Graphics.DrawLine(pen, 10, 10, 100, 200); // рисует отрезок красного цвета, толщина кисти 5
            e.Graphics.DrawEllipse(pen, 40, 50, 70, 90); // рисует эллипс красного цвета, толщина кисти 5
            pen.Dispose();
       }
понятно, рисует отрезок и эллипс, но как можно задать нужный мне цвет для кисти "pen" ?!
мне не надо красный или зелёный или ещё какой то, который уже имеет название и цвет, мне к примеру надо какой нибудь серобуромалинофиолетовый в крапинку, но 100% что в библиотеке нет такого названия цвета, значит надо сперва его создать, а затем присвоить в переменную с соответствующим именем, но вот как это сделать нигде нет, никаких примеров или хотя бы что нибудь, что бы можно было посмотреть и на этом примере написать своё.
P.S. мб где то и есть то что надо, но я ещё и с английским не дружу почти, а на русском языке к сожалению ничего не нашёл

Добавлено через 2 часа 6 минут
в первом сообщении опечатка "GUIPlus" и "GUI+", правильно - GDIPlus, GDI+.
0
 Аватар для v.egorov
3 / 3 / 1
Регистрация: 17.07.2012
Сообщений: 12
22.12.2012, 12:48
читайте на MSDN о пространстве имен System.Windows.Forms.DataVisualization.C harting. там найдете и свечи, и цвет для них "серо-буро-малиновый", и еще много чего полезного..
http://msdn.microsoft.com/ru-r... 89065.aspx
0
 Аватар для dreamorder
0 / 0 / 0
Регистрация: 07.10.2012
Сообщений: 60
22.12.2012, 13:56  [ТС]
v.egorov, Большое спасибо за ссылку, но я так и не нашёл примера создания своего цвета,
что то типа такого:

Global $PenBlue = _GDIPlus_PenCreate(0xFF0066FF,2) ; создаёт перо с указанным цветом и толщиной для линии (пример из др. языка программирования)

как написать подобное создание в C#? в этой строке к примеру:
C#
1
Pen pen = new Pen(Color.Green, 5); // здесь на место "Green" нужно назначить свой цвет, которого нет в базе
P.S. Пока не думаю что нужен класс Chart в моём проекте, я рисую график гораздо проще,
осталось только научиться задавать свой цвет и сдвигать рисунок влево

Добавлено через 3 минуты
Цитата Сообщение от dreamorder Посмотреть сообщение
Помогите пожалуйста с примерами кода. Как рисовать то на С# ?!
читать я умею
0
 Аватар для v.egorov
3 / 3 / 1
Регистрация: 17.07.2012
Сообщений: 12
22.12.2012, 14:13
наверное, так
C#
1
Pen pen = new Pen(Color.FromArgb(11, 22, 33), 5);
вместо цифр (11, 22, 33) ставите нужные, чтобы получился необходимый цвет. Если поставите на студию ReSharper, то он Вам сам предложит выбрать нужный цвет из палитры (как в фотошопе) и еще много чего подскажет...
1
 Аватар для dreamorder
0 / 0 / 0
Регистрация: 07.10.2012
Сообщений: 60
22.12.2012, 14:18  [ТС]
v.egorov, Ещё раз спасибо!
Вот это дело, то что нужно
0
 Аватар для dreamorder
0 / 0 / 0
Регистрация: 07.10.2012
Сообщений: 60
26.12.2012, 03:26  [ТС]
Продолжая тему ... .
Как возможно рисовать, не стирая при перерисовке уже нарисованное в области для рисования?
При вызове:
C#
1
panelGrafic.Invalidate();
всё ранее нарисованное не отображается заново, рисует только по новым координатам
Рисую на картинке, установленной фоном области для рисования.
Всё что нашёл в поисковике, не подходит, во всех примерах нет фоновой картинки при создании графического пространства для рисования.
Покажите пожалуйста как рисовать на картинке, не стирая нарисованное при вызове перерисовки области, ну или как сделать прозрачной зону для рисования, чтобы под неё поместить картинку.
Заранее спасибо.
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
26.12.2012, 05:15
Все что, рисуешь, должно быть зафиксировано где-то в данных. И затем просто перерисовывается в paint.
К примеру, массив точек и т.д.
0
 Аватар для Doomer3D
180 / 180 / 32
Регистрация: 23.11.2012
Сообщений: 344
Записей в блоге: 1
26.12.2012, 08:06
Автор, тут форум, а не учебник. Вся прорисовка - это лишь несколько методов класса Graphics, но они не помогут, если не знаешь сам язык, а если ты его знаешь, то с MSDN в руках можно решить любую проблему.

Для рисования графика функции может помочь класс GraphicsPath, в котором можно задать гладкую кривую по точкам.
0
 Аватар для dreamorder
0 / 0 / 0
Регистрация: 07.10.2012
Сообщений: 60
26.12.2012, 08:35  [ТС]
Вот именно! Тут форум. А не подскажите уважаемый, зачем форумы существуют в инете?!
И да, если бы я знал язык, тогда бы и не убивал драгоценное время на простые (как это кажется "умникам", которые сами ни хрена не знают, ну судя по предоставленным примерам по теме и исчерпывающим ответам) вопросы!


Добавлено через 16 минут
Что бы не занимать попусту место под пустые советы, можно хотя бы посмотреть мой пример программки в прикреплённом архиве, чуть выше в теме, всё существующее, придуманное для рисования графика, это не то что надо.
0
 Аватар для Doomer3D
180 / 180 / 32
Регистрация: 23.11.2012
Сообщений: 344
Записей в блоге: 1
26.12.2012, 08:43
Я изучал первый язык, когда мне было 7 лет, потом изучил еще пять языков без всяких форумов - просто по книжке или вообще без книжки, а по брошюре, где тупо перечислены функции языка, а у тебя есть возможность использовать MSDN и скачать сотню толстых томов в интернете или купить в магазине.

А запускать EXEшники непонятного происхождения я не буду. Если у вас есть вопрос - формулируйте его и мы ответим.
0
 Аватар для dreamorder
0 / 0 / 0
Регистрация: 07.10.2012
Сообщений: 60
26.12.2012, 09:18  [ТС]
Когда мне было уже 14 лет, в моей образцово-показательной школе №76, ещё не преподавали информатику, по этому я и не изучал программирование и языки, хотя тогда были уже ассемблер и бейсик. И даже стали появляться первые, персональные машины, типа "БК" и "Синклер"(ZX Spectrum).
Теперь (в моём возрасте) не очень легко даётся освоение всего нового, и в частности C#, хотя Autoit понял за неделю.
P.S. По поводу запуска .exe файлов, насмешили Вы меня. Повторюсь, читать я умею, но всё что попадается, это очень не внятное, с примерами без комментариев к строкам, ну или оч. не подробными комментариями, которые можно было бы совсем не писать, пользы от них ноль.
Книжку Герберта Шилдта "С# 3.0, 4.0 Полное руководство" начал по второму кругу. Это единственное (пока) что попалось из
нормального и понятного.
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
26.12.2012, 09:23
Есть Эндрю Троелсена книги. Тоже понятно пишет.
При желании глубже уйти в недра .NET - Джеффри Рихтер: CLR via C#.
0
 Аватар для Doomer3D
180 / 180 / 32
Регистрация: 23.11.2012
Сообщений: 344
Записей в блоге: 1
26.12.2012, 09:24

Не по теме:

Собственно с БК-0010 я и начал, там был язык Фокал, позже бейсик.



Могу порекомендовать книгу, это единственная, которую я использую:
Pro C# 2008 and the .NET 3.5 Platform, Fourth Edition

Здесь есть очень много примеров на многие темы, правда на английском. Со страницы 985 есть примеры работы с графикой.
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
26.12.2012, 09:25
просто копайся в System.Drawing, System.Drawing.2D (object explorer) + msdn
0
 Аватар для dreamorder
0 / 0 / 0
Регистрация: 07.10.2012
Сообщений: 60
26.12.2012, 10:02  [ТС]
Гос-да, спс за рекомендации по книгам. Буду читать, но практика обязательна, и тема не закрыта.
По прежнему хотелось бы увидеть пример кода, как рисовать на фоновой картинке, не стирая при перерисовке уже нарисованное.

P.S.Сейчас начал читать про WPF, думаю это больше подходит для моих целей.

Добавлено через 26 минут
Отказался(пока) от WPF.
0
 Аватар для Doomer3D
180 / 180 / 32
Регистрация: 23.11.2012
Сообщений: 344
Записей в блоге: 1
26.12.2012, 10:30
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
        // переменные формы
        private Bitmap bmp;                     // изображение, на котором рисуем
        private Graphics g;                     // GDI+
        private Random rnd = new Random();      // генератор случайных чисел для DrawRandomLine
 
        /// <summary>
        /// инициализация графики
        /// </summary>
        /// <param name="pictureBox"> исходный PictureBox </param>
        private void InitGraphics(PictureBox pictureBox)
        {
            // создаем картинку
            bmp = new Bitmap(pictureBox.ClientSize.Width, pictureBox.ClientSize.Height);
            g = Graphics.FromImage(bmp);
 
            // заливаем все черным
            g.Clear(Color.Black);
 
            // задаем изображение картинке
            pictureBox.Image = bmp;
        }
 
        /// <summary>
        /// уничтожение ранее созданных объектов
        /// </summary>
        private void DestroyGraphics()
        {
            if (g != null)
            {
                g.Dispose();
                g = null;
            }
            if (bmp != null)
            {
                bmp.Dispose();
                bmp = null;
            }
        }
 
        /// <summary>
        /// нарисовать случную линию
        /// </summary>
        private void DrawRandomLine()
        {
            int x1 = rnd.Next(bmp.Width);
            int x2 = rnd.Next(bmp.Width);
            int y1 = rnd.Next(bmp.Height);
            int y2 = rnd.Next(bmp.Height);
 
            g.DrawLine(Pens.White, x1, y1, x2, y2);
        }
 
        /// <summary>
        /// загрузка формы
        /// </summary>
        /// <param name="e"></param>
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
 
            InitGraphics(picDraw);
 
            // рисуем пять случаных линий
            for (int i = 0; i < 5; i++)
            {
                DrawRandomLine();
            }
        }
 
        /// <summary>
        /// закрытие формы
        /// </summary>
        /// <param name="e"></param>
        protected override void OnClosed(EventArgs e)
        {
            DestroyGraphics();
 
            base.OnClosed(e);
        }
Замените picDraw на свой PictureBox на форме.

Далее можете написать свои методы для рисования, используя g.
1
 Аватар для dreamorder
0 / 0 / 0
Регистрация: 07.10.2012
Сообщений: 60
26.12.2012, 10:38  [ТС]
Doomer3D, Большое спасибо!
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
26.12.2012, 12:03
Graphics - это наш мольберт с холстом(листом) и инструментами сразу.
Для того чтоб что-то нарисовать необходимо создать объект Graphics для указанного холста.
Методы Paint дают e.Graphics привязанный к холсту, который на фоне вызвавшего контрола.

В вашем случае необходимо создать свой собственный холст.
Bitmap bmp = new Bitmap(width, heiht);//глобальная переменная чтоб рисунок сохранялся с каждым шагом
Graphics g = Graphics.FromImage(bmp);
//рисуем на нашем холсте что хотим
//выводим рисунок при помощи PictureBox

необходимо сместить график?
применяем g.TranslateTransform(смещение по х, смещение по у);
Эта функция как бы сдвигает рисунок относительно холста.
и дорисовываем в конец холста новые данные.
снова выводим наш холст Bitmap в PictureBox
1
 Аватар для Doomer3D
180 / 180 / 32
Регистрация: 23.11.2012
Сообщений: 344
Записей в блоге: 1
26.12.2012, 12:20
g.TranslateTransform
Сразу отмечу, что использование матриц трансформации жутко сказывается на производительности. Лучше их не использовать вообще, ну и или крайне редко (для вращения картинок).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.12.2012, 12:20
Помогаю со студенческими работами здесь

Нарисовать 10 заполненных звёзд разного стиля и цвета заполнения
Звёзды то я нарисовал а вот как их закрасить разными цветами и стилями не знаю помогите Uses Graphabc, abcobjects; var ...

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

Выгрузка японских свечей на график
Недавно нашел пример на C# NET 4.x WPF, &quot;Выгрузка свечей на График chart Open Source https://smart-lab.ru/blog/225521.php Я немного...

Рисование квадратов разного размера, разного цвета и появляющихся в произвольных местах экрана
Помогите пжл с задачкой: 1) Рисование квадратов разного размера, разного цвета и появляющихся в произвольных местах экрана. 2)...

Изобразить три вертикальные полосы разного цвета на экране, которые меняют свои цвета
Прохожу учебную практику, имеется порядка 30 задач. С этими возникли трудности 1)модуль crt Изобразить три вертикальные полосы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru