С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/79: Рейтинг темы: голосов - 79, средняя оценка - 4.78
 Аватар для [XandeR]
31 / 31 / 3
Регистрация: 18.03.2009
Сообщений: 381
Записей в блоге: 2

Генерация штрих кодов

31.03.2012, 15:58. Показов 14813. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Кто нибудь сталкивался с генерацией штрих-кодов? Необходимо сгенерировать штрих код в компонент Image. Если у кого то есть какие либо наработки, поделитесь, буду очень признателен.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.03.2012, 15:58
Ответы с готовыми решениями:

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

Нужен аналог FastReport, генерация штрих-кодов, помогите пожалуйста!
Нужно создавать отчёты со штрих-кодами, для DELPHI есть мощный инструмент FastReport, а есть ли что-то подобное для VB6 - не знаю. Может ли...

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

16
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
31.03.2012, 17:46
Расскажи о самой генерации, нарисовать в Image не проблема
1
 Аватар для Mr.Sandman
42 / 59 / 15
Регистрация: 19.12.2011
Сообщений: 552
31.03.2012, 20:10
Есть большое количество программ http://www.softsoft.ru/search/5790/index.htm
Может что то от туда позаимствовать?
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
31.03.2012, 20:13
Лучший ответ Сообщение было отмечено как решение

Решение

Оказывается, всё просто. http://ru.wikipedia.org/wiki/E... cle_Number
Первая цифра определяет, каким кодом (L-кодом, G-кодом или R-кодом ) будет кодироваться каждая цифра в левой части ( состоящей из 6 цифр) штрих-кода:
Первая цифра штрих-кодаЛевая группа из 6 цифрПравая группа из 6 цифр
0LLLLLLRRRRRR
1LLGLGGRRRRRR
2LLGGLGRRRRRR
3LLGGGLRRRRRR
4LGLLGGRRRRRR
5LGGLLGRRRRRR
6LGGGLLRRRRRR
7LGLGLGRRRRRR
8LGLGGLRRRRRR
9LGGLGLRRRRRR

Собственно, сама таблица L,R,G кодов для каждой цифры:
ЦифраL-кодR-кодG-код
0000110111100100100111
1001100111001100110011
2001001111011000011011
3011110110000100100001
4010001110111000011101
5011000110011100111001
6010111110100000000101
7011101110001000010001
8011011110010000001001
9000101111101000010111
Из этой таблицы можно увидеть, какой будет ширина черных и белых штрихов.
один нолик - один пиксель белого штриха
одна единичка - один пиксель черного штриха

Например, G-код цифры 5 визуально будет отображаться так:
первый пиксель - белый штрих, следующие 3 пикселя - черный штрих, следующие 2 пикселя - белый штрих, последний пиксель - черный штрих.
6
 Аватар для [XandeR]
31 / 31 / 3
Регистрация: 18.03.2009
Сообщений: 381
Записей в блоге: 2
31.03.2012, 20:22  [ТС]
Готовых наработок ни у кого нет?
0
 Аватар для Pirat-SR
67 / 67 / 10
Регистрация: 20.02.2012
Сообщений: 234
31.03.2012, 20:26
Можно исходный код?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
31.03.2012, 20:59
Краткое руководство по работе с классом TCanvas для начинающих
И рисовать полосочки - LineTo, MoveTo.
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
31.03.2012, 21:20
Вот код. Проверил - работает.
В переменную shtrixcode записывается 13-значный штрих-код какого-нибудь продукта.
Выходом будет булевский массив visual_strixcode, в который будут записаны нули и единицы
( 0 - означает один пиксель белого штрих-кода, 1 - означает один пиксель черного штрих-кода)
Останется Вам только на Image вывести.

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
int shtrixcode[13] = {4,6,0,1,2,5,0,2,0,2,1,7,4};
 
int sxem_table[10][12] = { {0,0,0,0,0,0,1,1,1,1,1,1},
                          {0,0,2,0,2,2,1,1,1,1,1,1},
                          {0,0,2,2,0,2,1,1,1,1,1,1},
                          {0,0,2,2,2,0,1,1,1,1,1,1},
                          {0,2,0,0,2,2,1,1,1,1,1,1},
                          {0,2,2,0,0,2,1,1,1,1,1,1},
                          {0,2,2,2,0,0,1,1,1,1,1,1},
                          {0,2,0,2,0,2,1,1,1,1,1,1},
                          {0,2,0,2,2,0,1,1,1,1,1,1},
                          {0,2,2,0,2,0,1,1,1,1,1,1} };
bool LGR_codes[10][3][7] = { { {0,0,0,1,1,0,1}, {1,1,1,0,0,1,0}, {0,1,0,0,1,1,1} },
                             { {0,0,1,1,0,0,1}, {1,1,0,0,1,1,0}, {0,1,1,0,0,1,1} },
                             { {0,0,1,0,0,1,1}, {1,1,0,1,1,0,0}, {0,0,1,1,0,1,1} },
                             { {0,1,1,1,1,0,1}, {1,0,0,0,0,1,0}, {0,1,0,0,0,0,1} },
                             { {0,1,0,0,0,1,1}, {1,0,1,1,1,0,0}, {0,0,1,1,1,0,1} },
                             { {0,1,1,0,0,0,1}, {1,0,0,1,1,1,0}, {0,1,1,1,0,0,1} },
                             { {0,1,0,1,1,1,1}, {1,0,1,0,0,0,0}, {0,0,0,0,1,0,1} },
                             { {0,1,1,1,0,1,1}, {1,0,0,0,1,0,0}, {0,0,1,0,0,0,1} },
                             { {0,1,1,0,1,1,1}, {1,0,0,1,0,0,0}, {0,0,0,1,0,0,1} },
                             { {0,0,0,1,0,1,1}, {1,1,1,0,1,0,0}, {0,0,1,0,1,1,1} } };
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
        int i_sxem = shtrixcode[0];
        bool visual_strixcode[84];
        int v_count = 0;
 
        String s = "";
 
        for ( int i = 1; i < 13; i++ )
        {
                int cifra = shtrixcode[i];
                for ( int j = 0; j < 7; j++ )
                {
                        visual_strixcode[v_count++] = LGR_codes[cifra][sxem_table[i_sxem][i-1]][j];
                        s += (int)visual_strixcode[v_count-1];
                }
                s += "\r\n";
        }
        int k = 0;
        ShowMessage(s);
}
2
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
31.03.2012, 21:20
Тогда попиксельно можно выводить...
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
31.03.2012, 21:27
Можно и FillRect, а можно и линию к линии рисовать, что проще, если
1 - означает один пиксель черного штрих-кода
.
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
31.03.2012, 21:57
Сделал с выводом на Image, но без цифр.
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
int shtrixcode[13] = {4,6,0,1,2,5,0,2,0,2,1,7,4};
 
int sxem_table[10][12] = { {0,0,0,0,0,0,1,1,1,1,1,1},
                          {0,0,2,0,2,2,1,1,1,1,1,1},
                          {0,0,2,2,0,2,1,1,1,1,1,1},
                          {0,0,2,2,2,0,1,1,1,1,1,1},
                          {0,2,0,0,2,2,1,1,1,1,1,1},
                          {0,2,2,0,0,2,1,1,1,1,1,1},
                          {0,2,2,2,0,0,1,1,1,1,1,1},
                          {0,2,0,2,0,2,1,1,1,1,1,1},
                          {0,2,0,2,2,0,1,1,1,1,1,1},
                          {0,2,2,0,2,0,1,1,1,1,1,1} };
bool LGR_codes[10][3][7] = { { {0,0,0,1,1,0,1}, {1,1,1,0,0,1,0}, {0,1,0,0,1,1,1} },
                             { {0,0,1,1,0,0,1}, {1,1,0,0,1,1,0}, {0,1,1,0,0,1,1} },
                             { {0,0,1,0,0,1,1}, {1,1,0,1,1,0,0}, {0,0,1,1,0,1,1} },
                             { {0,1,1,1,1,0,1}, {1,0,0,0,0,1,0}, {0,1,0,0,0,0,1} },
                             { {0,1,0,0,0,1,1}, {1,0,1,1,1,0,0}, {0,0,1,1,1,0,1} },
                             { {0,1,1,0,0,0,1}, {1,0,0,1,1,1,0}, {0,1,1,1,0,0,1} },
                             { {0,1,0,1,1,1,1}, {1,0,1,0,0,0,0}, {0,0,0,0,1,0,1} },
                             { {0,1,1,1,0,1,1}, {1,0,0,0,1,0,0}, {0,0,1,0,0,0,1} },
                             { {0,1,1,0,1,1,1}, {1,0,0,1,0,0,0}, {0,0,0,1,0,0,1} },
                             { {0,0,0,1,0,1,1}, {1,1,1,0,1,0,0}, {0,0,1,0,1,1,1} } };
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
        int i_sxem = shtrixcode[0];
        bool visual_strixcode[95];
        int visual_height[95];
        for ( int i = 0; i < 95; i++ ) visual_height[i] = 40;
        int v_count = 0;
 
        String s = "";
 
        // -------------------------- íà÷àëüíûå 2 ÷åðíûõ øòðèõà -------------------------
        visual_strixcode[v_count] = 1; visual_height[v_count] = 45; v_count++;
        visual_strixcode[v_count] = 0; visual_height[v_count] = 45; v_count++;
        visual_strixcode[v_count] = 1; visual_height[v_count] = 45; v_count++;
        // -------------------------------------------------------------------------------------
 
        // --------------------------------- ëåâàÿ ÷àñòü --------------------------------------
        for ( int i = 1; i < 7; i++ )
        {
                int cifra = shtrixcode[i];
                for ( int j = 0; j < 7; j++ )
                {
                        visual_strixcode[v_count++] = LGR_codes[cifra][sxem_table[i_sxem][i-1]][j];
                        s += String((int)visual_strixcode[v_count-1]);
                }
                s += "\r\n";
        }
        // -------------------------------------------------------------------------------------
 
        s += "\r\n";
 
        // ----------------------------- 2 ÷åðíûõ øòðèõà ïî ñåðåäèíå ---------------------------
        visual_strixcode[v_count] = 0; visual_height[v_count] = 45; v_count++;
        visual_strixcode[v_count] = 1; visual_height[v_count] = 45; v_count++;
        visual_strixcode[v_count] = 0; visual_height[v_count] = 45; v_count++;
        visual_strixcode[v_count] = 1; visual_height[v_count] = 45; v_count++;
        visual_strixcode[v_count] = 0; visual_height[v_count] = 45; v_count++;
        // -------------------------------------------------------------------------------------
 
 
        // --------------------------------- ïðàâàÿ ÷àñòü --------------------------------------
        for ( int i = 7; i < 13; i++ )
        {
                int cifra = shtrixcode[i];
                for ( int j = 0; j < 7; j++ )
                {
                        visual_strixcode[v_count++] = LGR_codes[cifra][sxem_table[i_sxem][i-1]][j];
                        s += String((int)visual_strixcode[v_count-1]);
                }
                s += "\r\n";
        }
        // -------------------------------------------------------------------------------------
 
        //ShowMessage(s);
 
        // -------------------------- ïîñëåäíèå 2 ÷åðíûõ øòðèõà -------------------------
        visual_strixcode[v_count] = 1; visual_height[v_count] = 45; v_count++;
        visual_strixcode[v_count] = 0; visual_height[v_count] = 45; v_count++;
        visual_strixcode[v_count] = 1; visual_height[v_count] = 45; v_count++;
        // -------------------------------------------------------------------------------
 
        // ---------------------------------- îòðèñîâêà ---------------------------------
        for ( int i = 0; i < 96; i++ )
        {
                if (visual_strixcode[i]) Image1->Canvas->Pen->Color = clBlack;
                else Image1->Canvas->Pen->Color = clWhite;
                Image1->Canvas->MoveTo(i, 0);
                Image1->Canvas->LineTo(i, visual_height[i]);
        }
        // ------------------------------------------------------------------------------
}
5
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
31.03.2012, 22:14
Прицепить TextOut, и будут цифры.
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
01.04.2012, 07:03
Цитата Сообщение от LK Посмотреть сообщение
Прицепить TextOut, и будут цифры.
не интересно, сами сделают
1
 Аватар для [XandeR]
31 / 31 / 3
Регистрация: 18.03.2009
Сообщений: 381
Записей в блоге: 2
01.04.2012, 14:01  [ТС]
kzru_hunter, спасибо большое!
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
18.08.2013, 00:24
Есть такая библиотека TBarCode
http://www.tec-it.com/en/downl... umentation

Платная, есть демки под разные среды.

Но чет не понравилась она мне.

0
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
15.04.2016, 15:36
Интересно а двухмерный штрих код можно написать таким образом?
Миниатюры
Генерация штрих кодов  
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
15.04.2016, 16:01
Samrisbe, ЭТО QR код, ЭТОЙ теме подымалось
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.04.2016, 16:01
Помогаю со студенческими работами здесь

Сканер Штрих-кодов.
В настройках пользователя поставил галку Используется сканер штрих-кодов .Но при проверке в обработке нет того что было отсканеровано,...

Сканирование штрих-кодов
Как написать метод считывания штрих-кода при помощи камеры андроид моб. устройства? Насколько сложно это может быть?

Сканер штрих кодов и БД
Здравствуйте, подскажите где копать. Идея такая: в одной стране человек программирует штрих код к товару и привязывает его к клиенту. В...

Сканер штрих-кодов
Привет всем! Подскажите, пожалуйста, кто сталкивался, современные сканеры штрих-кодов, подключенные на USB-порт или PS/2 имитируют...

Сканер штрих кодов
Имеется сканер штрих кодов Symbol ls2800. Проблема заключается в следующем : сканер подклюючен через СОМ порт; при сканировании штрих кода...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru