Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
7 / 7 / 1
Регистрация: 16.01.2012
Сообщений: 95
1

Внедрить текст в PictureBox и сохранить в файл

10.02.2012, 13:42. Показов 2860. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.

Пишется программа для видеонаблюдения. Все вроде хорошо, снимается картинка с нескольких камер, передается на сервер. Но хотелось бы дополнить сие произведение . Вот вопросик и возник, надо на картинку с камеры на сервере наложить текст, ну типа дата, время, № камеры и т.д., а потом сохранить это все в файл (AVI). Нарисовать на PictureBox-е можно, но при сохранении в файл, сохраняется только картинка. Хотел через скриншот эрана сделать. Вот и думаю может еще как нибудь можно.
Не подскажите?

Заранее благодарен.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.02.2012, 13:42
Ответы с готовыми решениями:

Нарисовать текст в PictureBox и сохранить в файл
Приветь всем! Как нарисовать текст в PictureBox и сахранит в файл

Как создать Word файл и сохранить в него картинку из PictureBox и текст из TextBoxов?
Подскажите как создать Word файл и сохранить в него картинку из Picturebox и текст из textboxов?

Дан файл 4.тхт, содержащий текст. Необходимо удалить из данного текста все пробелы. Сохранить преобразованный текст в файл
Дан файл 4.txt, содержащий текст. Необходимо удалить из данного текста все пробелы. Сохранить...

Сохранить изображение с PictureBox в файл
Приветствую! Если:PictureBox.Image = Image.FromFile("D:\Izo\C4.gif") дает нам возможность...

10
69 / 69 / 12
Регистрация: 09.08.2011
Сообщений: 116
Записей в блоге: 1
10.02.2012, 13:45 2
Можно, но тут придется иметь дело с WPF, необходимо создать свой контрол.
0
6048 / 3457 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
10.02.2012, 14:03 3
Цитата Сообщение от Masia_March Посмотреть сообщение
Можно, но тут придется иметь дело с WPF, необходимо создать свой контрол.
такое чувство, что до создания wpf задача была нерешаемой

DeGroup, из PictureBox выдергиваешь Image, для которого работаешь с Graphics.DrawString. А дальше Image.Save
2
7 / 7 / 1
Регистрация: 16.01.2012
Сообщений: 95
10.02.2012, 22:47  [ТС] 4
Вот набросал по быстрому
C#
1
2
3
4
5
6
7
8
9
10
11
12
        public static void SetStringToScreen(short ChannelNum, string Str, short X, short Y)
        {
            Font font = new Font("Microsoft Sans Serif", 16);
            SolidBrush brush = new SolidBrush(Color.Black);
            //Brush brush = Brushes.Black;
            Point point = new Point(X, Y);
            StringFormat stringFormat = new StringFormat();
 
            Graphics graphics = CamImageReceiver[ChannelNum].CreateGraphics();
            //Graphics graphics = Graphics.FromHwnd(CamImageReceiver[ChannelNum].Handle);
            graphics.DrawString(Str, font, brush, point, stringFormat);
        }
потом или так
C#
1
2
3
4
        private void CamPictureBox_Paint(object sender, PaintEventArgs e)
        {
            SetStringToScreen(0, "1234567890", 10, 10);
        }
или в нитке отдельно
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        public void Process()
        {
            try
            {
                while (_NetStart)
                {
                    using (MemoryStream MStream = new MemoryStream())
                    {
                        byte[] ReceiveBytes = UPDLister.Receive(ref EPGroup);
                        MStream.Position = 0;
                        MStream.Write(ReceiveBytes, 0, ReceiveBytes.Length);
 
                        MainForm.CamImageReceiver[Num].Image = Image.FromStream(MStream);
                        SetStringToScreen(Num, "1234567890", 10, 10);
                    }
                }
            }
            catch (Exception e)
            {
                return;
            }
 
        }
и во всех случаях выводимая строка моргает. Что делать, репу чешу . Есть мысли?

Заранее благодарен.
0
6048 / 3457 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
11.02.2012, 10:39 5
Цитата Сообщение от DeGroup Посмотреть сообщение
во всех случаях выводимая строка моргает
или упоминания о PictureBox в этом коде нет... или я его не вижу, а ведь изначально вопрос был о добавлении записи в PictureBox
0
7 / 7 / 1
Регистрация: 16.01.2012
Сообщений: 95
11.02.2012, 10:50  [ТС] 6
Цитата Сообщение от nio Посмотреть сообщение
или упоминания о PictureBox в этом коде нет... или я его не вижу, а ведь изначально вопрос был о добавлении записи в PictureBox
Извините что не пояснил CamImageReceiver[Num] это массив указателей на PictureBox-ы. Объявлено так -
public static PictureBox[] CamImageReceiver = new PictureBox[ChannelCount];
0
6048 / 3457 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
11.02.2012, 11:22 7
а как поисходит отображение на экране?
0
7 / 7 / 1
Регистрация: 16.01.2012
Сообщений: 95
11.02.2012, 11:52  [ТС] 8
Цитата Сообщение от nio Посмотреть сообщение
а как поисходит отображение на экране?
Накидал на форму 4 PictureBox-а (динамически надо бы создавать, но это позже), ну а потом вот
тупа заполняю массив CamImageReceiver и пускаю нитку, в ней по UDP получаю изображение от клиента засовываю в один из CamImageReceiver и здесь же рисую текст на нем. Вот....
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
80
81
82
83
84
namespace VNServer
{
    public partial class MainForm : Form
    {
        const byte ChannelCount = 4; // Количество каналов (камер)
        
        public static PictureBox[] CamImageReceiver = new PictureBox[ChannelCount];
 
        public MainForm()
        {
            InitializeComponent();
        }
 
        private void MainForm_Load(object sender, EventArgs e)
        {
            ....
            CamImageReceiver[0] = CamPictureBox1;
            CamImageReceiver[1] = CamPictureBox2;
            CamImageReceiver[2] = CamPictureBox3;
            CamImageReceiver[3] = CamPictureBox4;
        }
      ....
   }
//===============================================================
    public class NetProcess
    {
        public byte Num;
 
        public static Graphics graphics;
 
        public Thread NetThread;
        //-------------------------- 
        public NetProcess()
        {
            ....
            graphics = MainForm.CamImageReceiver[Num].CreateGraphics();
 
            _NetStart = true;
            NetThread = new Thread(new ThreadStart(Process));
            NetThread.IsBackground = true; // убить поток после завершения проги
            NetThread.Name = "NetThread_" + Num.ToString();
            NetThread.Start();
        }
        //---------------------------------------
        ~NetProcess()
        {
            ;
        }
        //----------------------------------------
        public void Process()
        {
            try
            {
                while (_NetStart)
                {
                    using (MemoryStream MStream = new MemoryStream())
                    {
                        byte[] ReceiveBytes = UPDLister.Receive(ref EPGroup);
                        MStream.Position = 0;
                        MStream.Write(ReceiveBytes, 0, ReceiveBytes.Length);
 
                        MainForm.CamImageReceiver[Num].Image = Image.FromStream(MStream);
                        SetStringToScreen(Num, "1234567890", 10, 10);
                    }
                }
            }
            catch (Exception e)
            {
                return;
            }
 
        }
        //---------------------------------------
        public static void SetStringToScreen(short ChannelNum, string Str, short X, short Y)
        {
            Font font = new Font("Microsoft Sans Serif", 16);
            SolidBrush brush = new SolidBrush(Color.Black);
            Point point = new Point(X, Y);
            StringFormat stringFormat = new StringFormat();
 
            graphics.DrawString(Str, font, brush, point, stringFormat);
        }
    }// public class NetProcess
}
Хочу попробовать сделать по другому, через клиент.
Кода клиент получает кадр с камеры, нарисовать строку там, а потом уже отправить серверу.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
       private void GetCamCapture(object sender, NewFrameEventArgs eventArgs)
        {
            using (MemoryStream MStream = new MemoryStream())
            {
                Bitmap image = (Bitmap)eventArgs.Frame.Clone();
                Image CamCaptureImage = image; // Кадр с камеры
                
  Вот здесь хотел добавить строку на Image
 
                MStream.Position = 0;
                CamCaptureImage.Save(MStream, System.Drawing.Imaging.ImageFormat.Jpeg);
                byte[] CaptureImageBuff = MStream.ToArray();
                UDPSocket.SendTo(CaptureImageBuff, PEPoint);
            }
        }
Но как выяснилось не у Image, не у Bitmap нет Graphics , может я туплю . Если есть идеи помогите.
0
Заблокирован
11.02.2012, 12:41 9
Цитата Сообщение от DeGroup Посмотреть сообщение
Но как выяснилось не у Image, не у Bitmap нет Graphics , может я туплю .
Graph = Graphics.FromImage(PicBox.Image/Bmp);
1
7 / 7 / 1
Регистрация: 16.01.2012
Сообщений: 95
11.02.2012, 12:56  [ТС] 10
Всем спасибо сдвинулся с мертвой точки.
0
6048 / 3457 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
11.02.2012, 13:28 11
DeGroup, а зачем рисовать текст на картинку для отображения? Отображай PictureBox отдельно, текст отдельно в Label, а на картинку текст накладывай перед сохранением.
0
11.02.2012, 13:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.02.2012, 13:28
Помогаю со студенческими работами здесь

Сохранить картинку из PictureBox в файл
Мне нужно сохранить картинку из PictureBox1 в файл. Код: Private Sub SaveAsBut_Click(ByVal...

Сохранить изображение из picturebox в файл
Здравствуйте, помогите пожалуйста решить проблему. Я хочу сделать программу следующего...

Сохранить изображение из PictureBox в файл
Ребят подскажите как сохранить изображение из picturebox файл jpg.

CreateGraphics.Drawstring в PictureBox сохранить в файл
Привет ребят! Подскажите, кто знает как решить проблему... У меня есть в PictureBox'e изображение....

Как сохранить изображение с PictureBox'a в файл
Задача специфическая, не знаю решается ли. Если кто знает, буду благодарен за помощь. Опишу...

OpenFileDialog. Выбрать файл, сохранить и отобразить в PictureBox
Доброго времени суток уважаемые форумчане Задача такова по нажатию на бутон должно открыться...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru