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

Рисование в Panel - Сохранение рисунка

15.10.2016, 23:47. Показов 11523. Ответов 11

Студворк — интернет-сервис помощи студентам
Как реализовать сохранение нарисованного в Panel.
Вроде сделал простенькую рисовалку (которая рисует эллипсами) с 3 функциями (менять цвета, регулировать толщину, стереть всё) но нужна 4 функция, сохранение нарисованного , смотрел на форумах ничего не нашёл под мой код,
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace draw
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        bool draw = false;
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
 
        private void Form1_MouseClick(object sender, MouseEventArgs e)
        {
            Graphics g = this.CreateGraphics();
            SolidBrush br = new SolidBrush(Color.Black);
            Pen pen = new Pen(br, 5);
            g.DrawEllipse(pen, e.X, e.Y, 50, 50);
        }
        private void panel1_MouseDown(object sender, MouseEventArgs e)
        {
            draw = true;
        }
        SolidBrush br = new SolidBrush(Color.Black);
        private void panel1_MouseMove(object sender, MouseEventArgs e)
        {
            if (draw)
            {
                Graphics g = panel1.CreateGraphics();
 
                g.FillRectangle(br, e.X, e.Y, trackBar1.Value, trackBar1.Value);
            }
        }
 
        private void panel1_MouseUp(object sender, MouseEventArgs e)
        {
            draw = false;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            colorDialog1.ShowDialog();
            br = new SolidBrush(colorDialog1.Color);
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            Graphics g = panel1.CreateGraphics();
            g.Clear(SystemColors.Control);
        }
 
        private void trackBar1_Scroll(object sender, EventArgs e)
        {
 
        }
 
        private void panel1_Paint(object sender, PaintEventArgs e)
        {
 
        }
 
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.10.2016, 23:47
Ответы с готовыми решениями:

Рисование в panel: вместо рисунка - белый прямоугольник
не получается нарисовать рисунок в panel, вместо этого появляется просто белый квадрат private void panel1_Paint(object sender,...

Рисование в PictureBox и сохранение рисунка
Создается простой графический редактор на C#. Проблема следующая: в PictureBox загружается рисунок из файла. Пользователь рисует в...

Очищение рисунка в panel при перекрытии его другими окнами
Всем добрый день. Изучаю c# пытаюсь написать свой Paint. Столкнулся с траблой очищается рисунок, который находится в Panel1. Очищается...

11
 Аватар для iDReeM
64 / 68 / 18
Регистрация: 21.10.2015
Сообщений: 228
16.10.2016, 01:14
костылизация:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
void ScreenShotPanel(string FileName)
        {
            //Получить размер бордера.
            Size BorderSize = new Size(this.Width - this.panel1.Width, this.Height - this.panel1.Height);
            //создаем изображение рамером в панель
            Bitmap screenshot = new Bitmap(this.panel1.Width, this.panel1.Height);
            //инициализируем графикс по это изображение.
            Graphics gr = Graphics.FromImage(screenshot);
            //копируем с экрана пиксели, не лучший костыль скажу сразу. попытался учесть размер бордера.
            gr.CopyFromScreen(this.Location.X + (BorderSize.Width / 2), this.Location.Y + (BorderSize.Height) - 8, 0, 0, new Size(this.Width - BorderSize.Width, this.Height - BorderSize.Height));
            //сохраняем
            screenshot.Save(FileName);
        }
юзинг изич
C#
1
 ScreenShotPanel("file.png");
1
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
16.10.2016, 03:28
MrFoge,
Все не верно сделано. Вот держите на скорую руку, примерно так должно быть.
Миниатюры
Рисование в Panel - Сохранение рисунка  
Вложения
Тип файла: rar Paint.rar (57.4 Кб, 167 просмотров)
0
0 / 0 / 0
Регистрация: 15.10.2016
Сообщений: 9
16.10.2016, 12:31  [ТС]
Цитата Сообщение от iDReeM Посмотреть сообщение
костылизация:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
void ScreenShotPanel(string FileName)
        {
            //Получить размер бордера.
            Size BorderSize = new Size(this.Width - this.panel1.Width, this.Height - this.panel1.Height);
            //создаем изображение рамером в панель
            Bitmap screenshot = new Bitmap(this.panel1.Width, this.panel1.Height);
            //инициализируем графикс по это изображение.
            Graphics gr = Graphics.FromImage(screenshot);
            //копируем с экрана пиксели, не лучший костыль скажу сразу. попытался учесть размер бордера.
            gr.CopyFromScreen(this.Location.X + (BorderSize.Width / 2), this.Location.Y + (BorderSize.Height) - 8, 0, 0, new Size(this.Width - BorderSize.Width, this.Height - BorderSize.Height));
            //сохраняем
            screenshot.Save(FileName);
        }
юзинг изич
C#
1
 ScreenShotPanel("file.png");
Или я не догоняю или что, но
1.Куда он это сохраняет, я вроде указал в скобках свою флешку и папку, захожу, а там нет файла?
2.Он сам сохраняет или нужно на что то нажать?
Может я неправильно указал путь?
C#
1
ScreenShotPanel("F:\\way\file.png");
0
.NET senior
 Аватар для bax_tang
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
16.10.2016, 13:02
MrFoge,
C#
1
ScreenShotPanel("F:\\way\\file.png"); // слэши!
0
0 / 0 / 0
Регистрация: 15.10.2016
Сообщений: 9
16.10.2016, 13:09  [ТС]
Цитата Сообщение от bax_tang Посмотреть сообщение
MrFoge,
C#
1
ScreenShotPanel("F:\\way\\file.png"); // слэши!
Всё равно не сохраняет, погоди , а чтобы сохранило что надо нажать?
0
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
16.10.2016, 13:38
MrFoge, я Вам написал что у Вас не верный подход, для того проекта что я скидывал сохранка делается вот так:

C#
1
2
3
4
5
6
7
8
9
Bitmap bm = new Bitmap(this.Width, this.Height);
this.DrawToBitmap(bm, new Rectangle(0, 0, bm.Width, bm.Height));
 
SaveFileDialog sfd = new SaveFileDialog();
 
if (sfd.ShowDialog() == DialogResult.OK)
{
    bm.Save(sfd.FileName);
}
0
0 / 0 / 0
Регистрация: 15.10.2016
Сообщений: 9
16.10.2016, 13:47  [ТС]
Цитата Сообщение от Sanya_sa Посмотреть сообщение
MrFoge, я Вам написал что у Вас не верный подход, для того проекта что я скидывал сохранка делается вот так:

C#
1
2
3
4
5
6
7
8
9
Bitmap bm = new Bitmap(this.Width, this.Height);
this.DrawToBitmap(bm, new Rectangle(0, 0, bm.Width, bm.Height));
 
SaveFileDialog sfd = new SaveFileDialog();
 
if (sfd.ShowDialog() == DialogResult.OK)
{
    bm.Save(sfd.FileName);
}
Просто мне не нужно рисовать эллипсами и линиями, мне нужно по пикселям как в моём проекте и сохранить рисунок.
0
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
16.10.2016, 13:52
Цитата Сообщение от MrFoge Посмотреть сообщение
Просто мне не нужно рисовать эллипсами и линиями, мне нужно по пикселям как в моём проекте и сохранить рисунок.
Какая разница, по пикселям или фигурами? РАсширте мой код, под свои нужды. А вот Ваш уже проблемотично будет расширять. Конечно смотрите сами, я когда начинал программировать, примерно как Вы реализовывал свои зыдумки по рисованию, в итоги все равно пришел к тому как это правильно делать. Просто Ваш подход с точки зрения оеального использования бесполезен (как и та рисовал ка что я скинул), а сточки зрения обучения Ваш код не побоюсь этого слова опасен, потому что все равно рано или поздно Вам придется переучиваться. Не помню кто сказа "плохие знания - хуже незнания!".
Только без обид, сам таким был) Удачи.
0
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
16.10.2016, 14:23
Вот с сохранкой.
Вложения
Тип файла: rar Paint.rar (70.4 Кб, 238 просмотров)
1
0 / 0 / 0
Регистрация: 15.10.2016
Сообщений: 9
16.10.2016, 14:26  [ТС]
Цитата Сообщение от Sanya_sa Посмотреть сообщение
Вот с сохранкой.
А, ну тогда спасибо!
0
 Аватар для iDReeM
64 / 68 / 18
Регистрация: 21.10.2015
Сообщений: 228
16.10.2016, 19:09
Цитата Сообщение от MrFoge Посмотреть сообщение
.Куда он это сохраняет, я вроде указал в скобках свою флешку и папку, захожу, а там нет файла?
когда ты при сохранении файла указываешь просто: имяфайла.формат - программа сохраняет файл рядом с собой.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.10.2016, 19:09
Помогаю со студенческими работами здесь

Рисование в Panel
Здравствуйте. Есть два вопроса. Ответьте пожалуйста: 1. Как в Panel нарисовать прямоугольник с скругленными углами. 2. Каким...

Panel стирает часть нарисованного на нем рисунка. Как оставить рисунок неизменным?
Есть Panel, который исполняет роль холста для рисования. Рисует хорошо, однако при изменении размера Panel рисунок, находящийся в области,...

Рисование в боаузере и сохранение на сервере рисунка
Как сделать похожий сервис? http://printio.ru/tees/new Где можно почитать про эти технологии?

Сохранение Рисунка из Word в отдельный файл Рисунка
Ситуация следующая. В документе Word есть рисунок, его надо преобразовать в файл Рисунок с сохранением всего качества. Как это сделать?...

Размещение рисунка на Panel
Здравствуйте, подскажите пожалуйста как разместить bitmap рисунок на панели. Нашёл что у Tpanel свойство Canvas недоступно. Нашёл решение:...


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

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