Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/30: Рейтинг темы: голосов - 30, средняя оценка - 4.53
4 / 4 / 2
Регистрация: 05.02.2013
Сообщений: 441

Реализация штрих-кода в picturebox по ГОСТ

01.08.2014, 11:11. Показов 6488. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Требуется совет знающего человека.
Необходимо реализовать штрих-код с ГОСТовскими размерами: http://www.ean-barcode.ru/info/

Предполагаю реализовать это в picturebox, чтобы от туда можно было потом копировать в различные программы (Indesign, word и т.д.).

Я не понимаю как это правильно реализовать, чтобы при печати размеры совпадали с ГОСТ ? Всё должно быть как можно проще, т.е. сгенерировал jpeg, запихал в буфер обмена и вставил куда надо без лишней подгонки и т.д.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.08.2014, 11:11
Ответы с готовыми решениями:

Реализация ГОСТ 34.11-94 или ГОСТ 34.11-2014
Поделитесь реализацией хэш функции для подсчета контрольной сумма файла. Одну нашел. Но она работает очень медленно. Файл 10 мб считает...

Задана таблица товаров и их штрих-кодов. Вывести данные при использовании сканера штрих-кода
Привет. Есть таблица с данными: штрих-код был отсканирован сканером, а все остальные данные введены вручную соответственно. При...

Реализация ГОСТ Р 34.10-2001
Нужно реализовать стандар Электроной цифровой подписи ГОСТ Р 34.10-2001 на C# (windows form application). Имею множество отдельных классов...

24
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
04.04.2021, 10:56
Студворк — интернет-сервис помощи студентам
Труляля, 1) удалите код класса BarCode из своей формы. Вместо этого добавьте в проект новый файл с именем BarCode.cs и разместите в нем следующий код
Кликните здесь для просмотра всего текста
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
using System.Drawing;
using System.Drawing.Drawing2D;
 
namespace Shop {
    internal static class BarCode {
        const float LINE_LEN = 0.8996f;//22,85 мм
        const float SPACE_UP_DOWN = 0.013f;//0,33 мм
        const float SPACE_LEFT = 0.1429f;//3,63 мм
        const float SPACE_RIGHT = 0.0909f;//2,31 мм
        const float SEPARATOR_LINE_LEN = 0.9646f;//24,5 мм
        const float TEXT_HEIGHT = 0.1083f;//25,91 - 23,16 = 2,75 мм
        const float TEXT_POS = 0.9118f;//23,16 мм
 
        //Коды для левой шестёрки
        static uint[,] Lcode = new uint[10, 7]{
            {0,0,0,1,1,0,1},
            {0,0,1,1,0,0,1},
            {0,0,1,0,0,1,1},
            {0,1,1,1,1,0,1},
            {0,1,0,0,0,1,1},
            {0,1,1,0,0,0,1},
            {0,1,0,1,1,1,1},
            {0,1,1,1,0,1,1},
            {0,1,1,0,1,1,1},
            {0,0,0,1,0,1,1}
        };
        //Коды для правой шестёрки
        static uint[,] Rcode = new uint[10, 7]{
            {1,1,1,0,0,1,0},
            {1,1,0,0,1,1,0},
            {1,1,0,1,1,0,0},
            {1,0,0,0,0,1,0},
            {1,0,1,1,1,0,0},
            {1,0,0,1,1,1,0},
            {1,0,1,0,0,0,0},
            {1,0,0,0,1,0,0},
            {1,0,0,1,0,0,0},
            {1,1,1,0,1,0,0}
        };
        //Коды разделителей
        static uint[,] Divcode = new uint[3, 5] {
            {1,0,1,2,2},
            {0,1,0,1,0},
            {1,0,1,2,2}
        };
        static Pen pen = new Pen(Color.White, 4.64f) { Alignment = PenAlignment.Right };
        static internal Bitmap DrawEAN13(string barCodeNum) {
 
            Bitmap barCodeBmp = new Bitmap(441, 307);
            barCodeBmp.SetResolution(300f, 300f);
 
            float res = barCodeBmp.HorizontalResolution;
 
            int w = (int)(barCodeBmp.Width + res * (SPACE_LEFT + SPACE_RIGHT)), h = (int)(barCodeBmp.Height + 2 * res * SPACE_UP_DOWN);
            Bitmap fullImage = new Bitmap(w, h);
            fullImage.SetResolution(res, res);
 
            float textSpace = 7 * pen.Width / 6;
            PointF textPt = new PointF(0, TEXT_POS * res);//координаты текста
            Font f = new Font("Courier", TEXT_HEIGHT * 72, FontStyle.Regular);
 
            using (Graphics g = Graphics.FromImage(barCodeBmp),
                            g1 = Graphics.FromImage(fullImage)) {
                g.FillRectangle(Brushes.White, new Rectangle(0, 0, 441, 307));
 
                //Ограничитель слева
                float x = 0f, y = SEPARATOR_LINE_LEN * res;
                for (int i = 0; i < 3; i++, x += pen.Width) {
                    pen.Color = Divcode[0, i] == 0 ? Color.White : Color.Black;
                    g.DrawLine(pen, x, 0, x, y);
                }
 
                //Левая половина кода
                int n;
                y = LINE_LEN * res;
                for (int i = 0; i < 6; i++, textPt.X += textSpace) {
                    textPt.X = x;
                    g.DrawString(barCodeNum[i].ToString(), f, Brushes.Black, textPt);
                    n = int.Parse(barCodeNum[i].ToString());
                    for (int j = 0; j < Lcode.GetLength(1); j++, x += pen.Width) {
                        pen.Color = Lcode[n, j] == 0 ? Color.White : Color.Black;
                        g.DrawLine(pen, x, 0, x, y);
                    }
                }
 
                //Ограничитель по центру
                y = SEPARATOR_LINE_LEN * res;
                for (int i = 0; i < Divcode.GetLength(1); i++, x += pen.Width) {
                    pen.Color = Divcode[1, i] == 0 ? Color.White : Color.Black;
                    g.DrawLine(pen, x, 0, x, y);
                }
 
                //Правая половина кода
                y = LINE_LEN * res;
                for (int i = 6; i < barCodeNum.Length; i++, textPt.X += textSpace) {
                    n = int.Parse(barCodeNum[i].ToString());
                    textPt.X = x;
                    g.DrawString(barCodeNum[i].ToString(), f, Brushes.Black, textPt);
                    for (int j = 0; j < Rcode.GetLength(1); j++, x += pen.Width) {
                        pen.Color = Lcode[n, j] == 0 ? Color.White : Color.Black;
                        g.DrawLine(pen, x, 0, x, y);
                    }
                }
                //Ограничитель справа
                y = SEPARATOR_LINE_LEN * res;
                for (int i = 0; i < 3; i++, x += pen.Width) {
                    pen.Color = Divcode[2, i] == 0 ? Color.White : Color.Black;
                    g.DrawLine(pen, x, 0, x, y);
                }
                g1.FillRectangle(Brushes.White, 0, 0, fullImage.Width, fullImage.Height);
                g1.DrawImage(barCodeBmp, res * SPACE_LEFT, res * SPACE_UP_DOWN);
            }
            return fullImage;
        }
        static internal void SaveBarCodeToFile(string path, string barCodeNum) {
            Bitmap bmp = DrawEAN13(barCodeNum);
            bmp.Save(path, System.Drawing.Imaging.ImageFormat.Jpeg);
            bmp.Dispose();
        }
 
    }
}


2) Уберите подписку на события Layout и TextChanged. Оставьте только button1_Click. В котором напишите
C#
1
2
3
4
        private void button1_Click(object sender, EventArgs e)
        {
            pictureBoxBarCode.Image = BarCode.DrawEAN13(textBoxEAN13.Text);
        }
1
0 / 0 / 0
Регистрация: 30.12.2014
Сообщений: 121
04.04.2021, 23:55
OwenGlendower, Огромное Вам спасибо за напутствие.
Хотел ещё спросить, пожалуй, напослед: как сделать так, чтобы штрих-коды были идентичны? Слева - полученный мой, справа - пример из данной ветки. С помощью программы распознования штрих-кодов на телефоне мой, соответственно, не считывается, а штрих-код примера - без проблем. Где необходимо совершить манипуляцию?
Заранее снова безмерно благодарен.
Миниатюры
Реализация штрих-кода в picturebox по ГОСТ  
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
05.04.2021, 12:30
Труляля, такое ощущение что штрих-код просто не влез целиком. Попробуйте увеличить размер PictureBox.
0
0 / 0 / 0
Регистрация: 30.12.2014
Сообщений: 121
05.04.2021, 13:17
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Труляля, такое ощущение что штрих-код просто не влез целиком. Попробуйте увеличить размер PictureBox.
Увеличивая размер PictureBox, к сожалению, увеличивается и сам штрих-код

Добавлено через 40 минут
Цитата Сообщение от Труляля Посмотреть сообщение
Увеличивая размер PictureBox, к сожалению, увеличивается и сам штрих-код
Разобрался с этим. Действительно, окно по высоте было меньше.
А чем может быть вызвано то, что не получается его сканировать? Просто сканер не считывает и все. Хотя из примера тот, что на фотографии, считывается без проблем
0
 Аватар для ViterAlex
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
05.04.2021, 13:17
Труляля, SizeMode поставить Auto.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.04.2021, 13:17
Помогаю со студенческими работами здесь

Реализация алгоритма ГОСТ Р 34.10-94
Есть ли у кого-нибудь исходник программы, реализующую данный алгоритм?

Алгоритмы для распознавания штрих-кода (бар-кода)
Дорогие друзья, нужны любые алгоритмы, о которых вы слышали и при помощи которых распознаются штрих-коды. Причем штрих-код может быть под...

Реализация шифрования по ГОСТ 28147-89
Добрый день. Возникла необходимость реализовать данный алгоритм шифрования. Изучил труды Винокурова и сам ГОСТ. Не могу отладить код......

Реализация шифра ГОСТ 28147-89
Всем привет. Вот решил загнаться комбинированной системой шифрования с шифрами ГОСТ 28147-89 и RSA. Пока засел на ГОСТе. Сам алгоритм я...

CUDA реализация гост 34.12(Кузнечик)
Всем привет! Пытаюсь реализовать алгоритм шифрования Кузнечик с использованием основе технологии CUDA, столкнулся с проблемой медленного...


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru