Класс для 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 КБ) 281 скачивание
Последний раз редактировалось Игорь Столяров 20 Апрель 2025, 19:40, всего редактировалось 16 раз.
Make Clarion Great Again ! 
- Игорь Столяров
- Ветеран движения
- Сообщения: 7948
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 92 раза
ZINT BarCode для Clarion
Так вот и я о том же …

а о массиве байт, что больше похоже на традиционный DIB/BMP … Пока не попробуешь - не узнаешь.

Make Clarion Great Again ! 
-
- Активист
- Сообщения: 185
- Зарегистрирован: 07 Февраль 2017, 16:58
ZINT BarCode для Clarion
Ну вот определенно нравится вам лезть на кактус... 
ВСЕ графические устройства (мониторы, принтеры, дигитайзеры и пр.) понимают ИСКЛЮЧИТЕЛЬНО DIB (Device Independent Bitmap)!
Все остальное - *.BMP, *.GIF, *.PNG, *.WMF и т.п., - это ФОРМАТЫ ФАЙЛОВ. Прежде чем вы их увидите на экране или напечатаете на принтере, их нужно преобразовать в DIB.
Как правило, этим занимаются соответствующие приложения: графические редакторы, драйверы принтеров и т.п.
Некоторые форматы, например, *.BMP, *.PNG, *.WMF, *.EMF, поддерживаются непосредственно Windows API. Если есть желание - можете посмотреть в MSDN. Желание гарантированно исчезнет...
Удачи в борьбе!

ВСЕ графические устройства (мониторы, принтеры, дигитайзеры и пр.) понимают ИСКЛЮЧИТЕЛЬНО DIB (Device Independent Bitmap)!
Все остальное - *.BMP, *.GIF, *.PNG, *.WMF и т.п., - это ФОРМАТЫ ФАЙЛОВ. Прежде чем вы их увидите на экране или напечатаете на принтере, их нужно преобразовать в DIB.
Как правило, этим занимаются соответствующие приложения: графические редакторы, драйверы принтеров и т.п.
Некоторые форматы, например, *.BMP, *.PNG, *.WMF, *.EMF, поддерживаются непосредственно Windows API. Если есть желание - можете посмотреть в MSDN. Желание гарантированно исчезнет...

Удачи в борьбе!
-
- ✯ Ветеран ✯
- Сообщения: 5143
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 25 раз
ZINT BarCode для Clarion
Отлично! Объясните мне (может и народу тоже) как этот классный DIB связать с контролом IMAGE в Кларионе?Constantine писал(а): 12 Февраль 2020, 8:49 Ну вот определенно нравится вам лезть на кактус...
ВСЕ графические устройства (мониторы, принтеры, дигитайзеры и пр.) понимают ИСКЛЮЧИТЕЛЬНО DIB (Device Independent Bitmap)!
We are hard at work… for you. 

- Игорь Столяров
- Ветеран движения
- Сообщения: 7948
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 92 раза
ZINT BarCode для Clarion
Это как раз-таки просто делается:
Код: Выделить всё
?Image{Prop:ImageBits} = DIB_ByteArray

Make Clarion Great Again ! 
-
- Активист
- Сообщения: 185
- Зарегистрирован: 07 Февраль 2017, 16:58
ZINT BarCode для Clarion
Ну, это совсем просто:Игорь Столяров писал(а): 12 Февраль 2020, 9:51 Другой вопрос, где взять этот самый DIB, если есть только Bitmap
1. Загрузить файл *.BMP в память. Если памяти мало, считать с диска с соответствующим смещением.
2. Отрезать BITMAPFILEHEADER.
3. Создать DIB-секцию.
4. С помощью функций API типа BitBlt скопировать в нее получившийся результат.
5. Вуаля!
-
- ✯ Ветеран ✯
- Сообщения: 5143
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 25 раз
ZINT BarCode для Clarion
Меня вы запутали. Хорошо, если сами не путаетесь. По моему опыту ?Image{Prop:ImageBits} возвращает картинку с заголовком. Также работает и обратное присваивание.
Игорь, что такое DIB_ByteArray?Игорь Столяров писал(а): 12 Февраль 2020, 9:51 Это как раз-таки просто делается:
Код: Выделить всё
?Image{Prop:ImageBits} = DIB_ByteArray
Другой вопрос, где взять этот самый DIB, если есть только Bitmap ...
We are hard at work… for you. 

- Игорь Столяров
- Ветеран движения
- Сообщения: 7948
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 92 раза
ZINT BarCode для Clarion
Некая бинарная последовательность, при записи которой в ?Image{Prop:ImageBits} будет показана картинка.

Вроде бы её формат должен быть DIB и в Win API она описывается как Byte Array.
Make Clarion Great Again ! 
-
- ✯ Ветеран ✯
- Сообщения: 5143
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 25 раз
ZINT BarCode для Clarion
У Constantine с точностью до наоборот. И я с ним согласен. Моя формула: Bitmap = DIB + Header.
We are hard at work… for you. 

-
- Активист
- Сообщения: 185
- Зарегистрирован: 07 Февраль 2017, 16:58
ZINT BarCode для Clarion
Кстати, Игорь, я не совсем понял, что имеется в виду под Bitmap?
Если файл *.BMP, то нужно действовать как я написал выше.
А если результат выполнения функции CreateCompatibleBitmap, то все еще проще: нужно просто создать DIB-секцию и скопировать в нее содержимое "Bitmap".
Если файл *.BMP, то нужно действовать как я написал выше.
А если результат выполнения функции CreateCompatibleBitmap, то все еще проще: нужно просто создать DIB-секцию и скопировать в нее содержимое "Bitmap".
-
- Активист
- Сообщения: 185
- Зарегистрирован: 07 Февраль 2017, 16:58
ZINT BarCode для Clarion
Не совсем так:
Если "Bitmap" создан при помощи функции CreateCompatibleBitmap, то содержимое "Bitmap" = DIB. Для того, чтобы его использовать в качестве DIB, его просто нужно поместить в DIB-секцию, чтобы Windows могла понять, что это.
Если же "Bitmap" создан из файла *.BMP, то тогда он начинается с заголовка BITMAPFILEHEADER, соответственно, все, что идет со смещением SIZE(BITMAPFILEHEADER)+1 = DIB. Его тоже нужно считать в DIB-секцию.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7948
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 92 раза
ZINT BarCode для Clarion
Тоже так думал, но у Microsoft другая точка зрения …

BMP (ФАЙЛ) = FileHeader + InfoHeader + (опционально палитры) + собственно BitMap.
Но ! Bitmap должен быть расширен по строкам - см. FreeImage или метод ZintClass.BitmapToImage()
И вот эту строку BMP мы можем записать в ?Image
Make Clarion Great Again ! 
-
- Активист
- Сообщения: 185
- Зарегистрирован: 07 Февраль 2017, 16:58
ZINT BarCode для Clarion
Возможно, это какая-то особенность FreeImage. У Windows такой особенности нет: все необходимое для отображения есть в BITMAPINFOHEADER.
Это только для 256-color. Информация об этом тоже есть в BITMAPINFOHEADER.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7948
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 92 раза
ZINT BarCode для Clarion
Понятно, что вся информация о рисунке есть BITMAPINFOHEADER - это его назначение.
Вопрос в другом, пардон, заблуждении.
Так вот, если мы запишем заголовок + эту последовательность длиной 30 * 40 * 3 byte в ?Image - то ничего не получится.
Я даже Вам больше скажу: совсем-совсем ничего не получится, абсолютно !
Так а мы вроде бы в Windows работаем … 
Вопрос в другом, пардон, заблуждении.
Пусть у нас есть bitmap картинки 30 x 40 пикселей, по три байта на пиксел (RGB) - т.е. т.н. 24-битная глубина цвета.
Так вот, если мы запишем заголовок + эту последовательность длиной 30 * 40 * 3 byte в ?Image - то ничего не получится.
Я даже Вам больше скажу: совсем-совсем ничего не получится, абсолютно !


Make Clarion Great Again ! 
-
- Активист
- Сообщения: 185
- Зарегистрирован: 07 Февраль 2017, 16:58
ZINT BarCode для Clarion
Гм... Странно... А у меня почему-то работает...

Скриншот окна 32-bit в HDC -> конвертация 32-bit DIB - 24-bit DIB -> создание и сохранение 24-bit *.BMP...
-
- Активист
- Сообщения: 185
- Зарегистрирован: 07 Февраль 2017, 16:58