Класс для API Zint «Штрих-коды»
Модератор: Дед Пахом
- Игорь Столяров
 - Ветеран движения
 - Сообщения: 8269
 - Зарегистрирован: 07 Июль 2005, 10:19
 - Откуда: г. Ростов-на-ДоМу
 - Благодарил (а): 34 раза
 - Поблагодарили: 106 раз
 
Класс для API Zint «Штрих-коды»
Библиотека для создания практически любых штрих-кодов.
В примере показан вывод штрих-кодов в окно и отчёт.
(Перекрестная ссылка на альтернативу viewtopic.php?p=40124#p40124) добавил Admin
			
							В примере показан вывод штрих-кодов в окно и отчёт.
(Перекрестная ссылка на альтернативу viewtopic.php?p=40124#p40124) добавил Admin
- Вложения
 - 
			
		
		
				
- Zint-2025-10-28.rar
 - Версия от 28.10.2025 г.
 - (428.69 КБ) 17 скачиваний
 
 
					Последний раз редактировалось Игорь Столяров 28 Октябрь 2025, 19:43, всего редактировалось 18 раз.
									
			
						За теми, кто отстал, не возвращаться ! 
 Кодекс
			
						- Игорь Столяров
 - Ветеран движения
 - Сообщения: 8269
 - Зарегистрирован: 07 Июль 2005, 10:19
 - Откуда: г. Ростов-на-ДоМу
 - Благодарил (а): 34 раза
 - Поблагодарили: 106 раз
 
ZINT BarCode для Clarion
Так вот и я о том же …
а о массиве байт, что больше похоже на традиционный DIB/BMP … Пока не попробуешь - не узнаешь.
За теми, кто отстал, не возвращаться ! 
 Кодекс
			
						- 
				Constantine
 - Активист
 - Сообщения: 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. Желание гарантированно исчезнет...
Удачи в борьбе!
- 
				kreator
 - ✯ Ветеран ✯
 - Сообщения: 5235
 - Зарегистрирован: 28 Май 2009, 15:54
 - Откуда: Москва
 - Благодарил (а): 11 раз
 - Поблагодарили: 26 раз
 
ZINT BarCode для Clarion
Отлично! Объясните мне (может и народу тоже) как этот классный DIB связать с контролом IMAGE в Кларионе?Constantine писал(а): 12 Февраль 2020, 8:49 Ну вот определенно нравится вам лезть на кактус...
ВСЕ графические устройства (мониторы, принтеры, дигитайзеры и пр.) понимают ИСКЛЮЧИТЕЛЬНО DIB (Device Independent Bitmap)!
We are hard at work… for you.   
			
						- Игорь Столяров
 - Ветеран движения
 - Сообщения: 8269
 - Зарегистрирован: 07 Июль 2005, 10:19
 - Откуда: г. Ростов-на-ДоМу
 - Благодарил (а): 34 раза
 - Поблагодарили: 106 раз
 
ZINT BarCode для Clarion
Это как раз-таки просто делается:
Код: Выделить всё
   ?Image{Prop:ImageBits} = DIB_ByteArray
За теми, кто отстал, не возвращаться ! 
 Кодекс
			
						- 
				Constantine
 - Активист
 - Сообщения: 185
 - Зарегистрирован: 07 Февраль 2017, 16:58
 
ZINT BarCode для Clarion
Ну, это совсем просто:Игорь Столяров писал(а): 12 Февраль 2020, 9:51 Другой вопрос, где взять этот самый DIB, если есть только Bitmap
1. Загрузить файл *.BMP в память. Если памяти мало, считать с диска с соответствующим смещением.
2. Отрезать BITMAPFILEHEADER.
3. Создать DIB-секцию.
4. С помощью функций API типа BitBlt скопировать в нее получившийся результат.
5. Вуаля!
- 
				kreator
 - ✯ Ветеран ✯
 - Сообщения: 5235
 - Зарегистрирован: 28 Май 2009, 15:54
 - Откуда: Москва
 - Благодарил (а): 11 раз
 - Поблагодарили: 26 раз
 
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.   
			
						- Игорь Столяров
 - Ветеран движения
 - Сообщения: 8269
 - Зарегистрирован: 07 Июль 2005, 10:19
 - Откуда: г. Ростов-на-ДоМу
 - Благодарил (а): 34 раза
 - Поблагодарили: 106 раз
 
ZINT BarCode для Clarion
Некая бинарная последовательность, при записи которой в ?Image{Prop:ImageBits} будет показана картинка.
Вроде бы её формат должен быть DIB и в Win API она описывается как Byte Array.
За теми, кто отстал, не возвращаться ! 
 Кодекс
			
						- 
				kreator
 - ✯ Ветеран ✯
 - Сообщения: 5235
 - Зарегистрирован: 28 Май 2009, 15:54
 - Откуда: Москва
 - Благодарил (а): 11 раз
 - Поблагодарили: 26 раз
 
ZINT BarCode для Clarion
У Constantine с точностью до наоборот. И я с ним согласен. Моя формула: Bitmap = DIB + Header.
			
			
									
						We are hard at work… for you.   
			
						- 
				Constantine
 - Активист
 - Сообщения: 185
 - Зарегистрирован: 07 Февраль 2017, 16:58
 
ZINT BarCode для Clarion
Кстати, Игорь, я не совсем понял, что имеется в виду под Bitmap?
Если файл *.BMP, то нужно действовать как я написал выше.
А если результат выполнения функции CreateCompatibleBitmap, то все еще проще: нужно просто создать DIB-секцию и скопировать в нее содержимое "Bitmap".
			
			
									
						Если файл *.BMP, то нужно действовать как я написал выше.
А если результат выполнения функции CreateCompatibleBitmap, то все еще проще: нужно просто создать DIB-секцию и скопировать в нее содержимое "Bitmap".
- 
				Constantine
 - Активист
 - Сообщения: 185
 - Зарегистрирован: 07 Февраль 2017, 16:58
 
ZINT BarCode для Clarion
Не совсем так:
Если "Bitmap" создан при помощи функции CreateCompatibleBitmap, то содержимое "Bitmap" = DIB. Для того, чтобы его использовать в качестве DIB, его просто нужно поместить в DIB-секцию, чтобы Windows могла понять, что это.
Если же "Bitmap" создан из файла *.BMP, то тогда он начинается с заголовка BITMAPFILEHEADER, соответственно, все, что идет со смещением SIZE(BITMAPFILEHEADER)+1 = DIB. Его тоже нужно считать в DIB-секцию.
- Игорь Столяров
 - Ветеран движения
 - Сообщения: 8269
 - Зарегистрирован: 07 Июль 2005, 10:19
 - Откуда: г. Ростов-на-ДоМу
 - Благодарил (а): 34 раза
 - Поблагодарили: 106 раз
 
ZINT BarCode для Clarion
Тоже так думал, но у Microsoft другая точка зрения …
BMP (ФАЙЛ) = FileHeader + InfoHeader + (опционально палитры) + собственно BitMap.
Но ! Bitmap должен быть расширен по строкам - см. FreeImage или метод ZintClass.BitmapToImage()
И вот эту строку BMP мы можем записать в ?Image
За теми, кто отстал, не возвращаться ! 
 Кодекс
			
						- 
				Constantine
 - Активист
 - Сообщения: 185
 - Зарегистрирован: 07 Февраль 2017, 16:58
 
ZINT BarCode для Clarion
Возможно, это какая-то особенность FreeImage. У Windows такой особенности нет: все необходимое для отображения есть в BITMAPINFOHEADER.
Это только для 256-color. Информация об этом тоже есть в BITMAPINFOHEADER.
- Игорь Столяров
 - Ветеран движения
 - Сообщения: 8269
 - Зарегистрирован: 07 Июль 2005, 10:19
 - Откуда: г. Ростов-на-ДоМу
 - Благодарил (а): 34 раза
 - Поблагодарили: 106 раз
 
ZINT BarCode для Clarion
Понятно, что вся информация о рисунке есть BITMAPINFOHEADER - это его назначение.
Вопрос в другом, пардон, заблуждении.
Так вот, если мы запишем заголовок + эту последовательность длиной 30 * 40 * 3 byte в ?Image - то ничего не получится.
Я даже Вам больше скажу: совсем-совсем ничего не получится, абсолютно !
 Так а мы вроде бы в Windows работаем … 
			
			
									
						Вопрос в другом, пардон, заблуждении.
Пусть у нас есть bitmap картинки 30 x 40 пикселей, по три байта на пиксел (RGB) - т.е. т.н. 24-битная глубина цвета.
Так вот, если мы запишем заголовок + эту последовательность длиной 30 * 40 * 3 byte в ?Image - то ничего не получится.
Я даже Вам больше скажу: совсем-совсем ничего не получится, абсолютно !
За теми, кто отстал, не возвращаться ! 
 Кодекс
			
						- 
				Constantine
 - Активист
 - Сообщения: 185
 - Зарегистрирован: 07 Февраль 2017, 16:58
 
ZINT BarCode для Clarion
Гм... Странно... А у меня почему-то работает...
Скриншот окна 32-bit в HDC -> конвертация 32-bit DIB - 24-bit DIB -> создание и сохранение 24-bit *.BMP...
- 
				Constantine
 - Активист
 - Сообщения: 185
 - Зарегистрирован: 07 Февраль 2017, 16:58
 
