Класс для API ZINT «Barcode Generator»
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Игорь Столяров
- Ветеран движения
- Сообщения: 7948
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 92 раза
Класс для API ZINT «Barcode Generator»
Библиотека для создания практически любых штрих-кодов.
В примере показан вывод штрих-кодов в окно и отчёт.
(Перекрестная ссылка на альтернативу viewtopic.php?p=40124#p40124) добавил Admin
В примере показан вывод штрих-кодов в окно и отчёт.
(Перекрестная ссылка на альтернативу viewtopic.php?p=40124#p40124) добавил Admin
- Вложения
-
- zint-2025-04-20.zip
- Версия: 20.04.2025 г.
- (509.49 КБ) 279 скачиваний
Последний раз редактировалось Игорь Столяров 20 Апрель 2025, 19:40, всего редактировалось 16 раз.
Make Clarion Great Again ! 
- Игорь Столяров
- Ветеран движения
- Сообщения: 7948
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 92 раза
ZINT BarCode для Clarion
Нет.

Если бы мы преобразовали его к 32-битной палитре, то размер его bitmap = 30*40*4 Byte. Но это не так.
Всё верно, только BITMAP = пиксели (кодирование цвета каждого пикселя), и тогда без путаницы в терминологии:Constantine писал(а): 13 Февраль 2020, 10:11 1. BITMAP = BITMAPINFOHEADER + пиксели. Если Вы его разместили в обычной памяти с помощью функции CreateCompatibleBitmap, то он и есть просто bitmap,
2. DIB = тот же самый BITMAP в DIB-секции, ее можно разместить как в обычной памяти, так и в контексте устройства (DC),
3. Файл *.BMP = BITMAPFILEHEADER + тот же самый BITMAP. Он может быть как в оперативной памяти (если Вы его там сформируете), так и на диске.
DIB = INFOHEADER + BITMAP
BMP = FILEHEADER + DIB = FILEHEADER + INFOHEADER + BITMAP
(там ещё есть опциональные палитры - но мы их не юзаем)
Make Clarion Great Again ! 
-
- Активист
- Сообщения: 185
- Зарегистрирован: 07 Февраль 2017, 16:58
- Игорь Столяров
- Ветеран движения
- Сообщения: 7948
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 92 раза
ZINT BarCode для Clarion
Ха ! А как мне это непонятно … но иначе не работает.

Тоже в начале думал, что сейчас быстренько запишу bitmap напрямую в ?Image и всё заработает, но нет.
Здесь есть связанный и возможно ключевой вопрос.
Есть два рисунка (?Image1 и ?Image2). В ?Image1 как-то загрузили картинку. Как нам скопировать эту картинку в ?Image2 ?
Make Clarion Great Again ! 
-
- Активист
- Сообщения: 185
- Зарегистрирован: 07 Февраль 2017, 16:58
ZINT BarCode для Clarion
Так, становится более-менее понятно... 
А если файл, сформированный ZINT, напрямую, через интерфейс Клариона, вставить в Image, - показывает?

А если файл, сформированный ZINT, напрямую, через интерфейс Клариона, вставить в Image, - показывает?
- Игорь Столяров
- Ветеран движения
- Сообщения: 7948
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 92 раза
ZINT BarCode для Clarion
Конечно. Причём оба варианта прекрасно работают:Constantine писал(а): 13 Февраль 2020, 10:58 А если файл, сформированный ZINT, напрямую, через интерфейс Клариона, вставить в Image, - показывает?
Код: Выделить всё
?Image{Prop:Text} = ZINT_FILE.BMP
?Image{Prop:ImageBits} = LoadFileToString(ZINT_FILE.BMP)
Make Clarion Great Again ! 
-
- Активист
- Сообщения: 185
- Зарегистрирован: 07 Февраль 2017, 16:58
-
- ✯ Ветеран ✯
- Сообщения: 5143
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 25 раз
ZINT BarCode для Clarion
Прикольно, однако.
Я делаю так:Игорь Столяров писал(а): 13 Февраль 2020, 10:55 Здесь есть связанный и возможно ключевой вопрос.
Есть два рисунка (?Image1 и ?Image2). В ?Image1 как-то загрузили картинку. Как нам скопировать эту картинку в ?Image2 ?
Код: Выделить всё
GLO:Legend1GradientColour = ?IMAGE1{prop:ImageBits}
Код: Выделить всё
create(i#, CREATE:image)
i#{prop:ImageBits} = GLO:Legend1GradientColour
We are hard at work… for you. 

- Игорь Столяров
- Ветеран движения
- Сообщения: 7948
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 92 раза
ZINT BarCode для Clarion
Ну я же не "программист" 1С, что бы называть методы ВозвращаетСтрокуССодержаниемФайла() …

Пардон, а как эта переменная описана ? По идее - String, но какой длины ?
Make Clarion Great Again ! 
-
- Активист
- Сообщения: 185
- Зарегистрирован: 07 Февраль 2017, 16:58
ZINT BarCode для Clarion
Правильно ли я понимаю, что если Кларионовскому Image подсунуть файл ZINT целиком, - проблем нет?
- Игорь Столяров
- Ветеран движения
- Сообщения: 7948
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 92 раза
ZINT BarCode для Clarion
Да верно, проблем нет. Впрочем, как и с любым другим файлом BMP ...Constantine писал(а): 13 Февраль 2020, 11:27 если Кларионовскому Image подсунуть файл ZINT целиком, - проблем нет?
Make Clarion Great Again ! 
-
- Активист
- Сообщения: 185
- Зарегистрирован: 07 Февраль 2017, 16:58
ZINT BarCode для Clarion
Ну, если так, то, похоже, Кларион под {PROP:ImageBits} понимает тупо копию ФАЙЛА в памяти. Причем, любого: BMP, GIF и т.п.
Соответственно, и подсовывать ему в этом случае надо файл: BIMAPFILEHEADER + BITMAPINFOHEADER + пиксели.
Можно, для эксперимента, считать файл ZINT ЦЕЛИКОМ в область памяти с помощью ReadFile, а ее адрес подсунуть {PROP:ImageBits}.
Если сработает, то к картинке ZINT нужно прицепить BITMAPFILEHEADER и получившуюся конструкцию перенести в обычную область памяти.
Соответственно, и подсовывать ему в этом случае надо файл: BIMAPFILEHEADER + BITMAPINFOHEADER + пиксели.
Можно, для эксперимента, считать файл ZINT ЦЕЛИКОМ в область памяти с помощью ReadFile, а ее адрес подсунуть {PROP:ImageBits}.
Если сработает, то к картинке ZINT нужно прицепить BITMAPFILEHEADER и получившуюся конструкцию перенести в обычную область памяти.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7948
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 92 раза
ZINT BarCode для Clarion
Спасибо. Вы сейчас дословно описали работу метода ZintClass.BitmapToImage(), который всё это делает.

Но путь к этому был не очевиден …

В ZINT есть ещё возможность генерить векторные форматы (SVG), но я с этим ещё не разбирался.
Make Clarion Great Again ! 
-
- ✯ Ветеран ✯
- Сообщения: 5143
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 25 раз
ZINT BarCode для Clarion
Ну у меня специфический кусок. String обычный, 2000 символов. Грубо говоря, с запасом. Я чётко уверен, что границу не перейду. По-хорошему, надо динамически делать.Игорь Столяров писал(а): 13 Февраль 2020, 11:22 kreator писал(а): ↑
13 Февраль 2020, 11:14
GLO:Legend1GradientColour
Пардон, а как эта переменная описана ? По идее - String, но какой длины ?
We are hard at work… for you. 

-
- Активист
- Сообщения: 185
- Зарегистрирован: 07 Февраль 2017, 16:58
ZINT BarCode для Clarion
Я старался...Игорь Столяров писал(а): 13 Февраль 2020, 11:58 Вы сейчас дословно описали работу метода ZintClass.BitmapToImage(), который всё это делает.

С учетом того, что я понятия не имею, что такое ZINT...
- Игорь Столяров
- Ветеран движения
- Сообщения: 7948
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 92 раза
ZINT BarCode для Clarion
Понимаете, в одной деревне всех звали Буратино … так и с этими BMP, DIB, bitmap.

Кто как хочет - так и называет всю эту графическую мешанину.
DIB это BMP файл без BITMAPFILEHEADER.
Значит с начала BMP файла пропускаем Size(BITMAPFILEHEADER),
а собственно bitmap находится со смещением bfOffbits от начала BMP файла.
Код: Выделить всё
BITMAPFILEHEADER Group,Type
bfType UShort
bfSize ULong
bfReserved1 UShort
bfReserved2 UShort
bfOffbits ULong ! Смещение Bitmap
end
Make Clarion Great Again ! 