Часто задаваемые вопросы о TBarCode OCX
Как создать оптимальное растровое изображение штрихкода (1D-код) для 812,8 DPI в VB6?
Как создать оптимальное растровое изображение штрихкода (1D-код) для 812,8 DPI в VB6?
Подход 1
Первый подход использует заранее заданную (пользовательскую) ширину модуля, устанавливает DPI, а затем рассчитывает общую ширину символа. Этот принцип работает и для других принтеров.
Метод OCX BCWidthHdc2 можно использовать для расчёта ширины штрихкода. Если ширина модуля задана, используйте произвольное значение для входного параметра nWidth. Если вы рассчитываете ширину в мм, впоследствии преобразуйте её в пиксели для функции SaveImage. Для высоты есть похожая функция — но высоту нужно рассчитывать только для 2D-штрихкодов.
Примечание: если задать ширину модуля ровно 0,3125 мм или 0,0123 дюйма, вы окажетесь на 100% в растре печати устройства с разрешением 812,8 dpi. Это одно из рекомендуемых значений. Если включён флаг оптимизации разрешения, ширина модуля изменяется до ближайшей (меньшей) границы пикселя в растре печати и таким образом «оптимизируется». Для этой оптимизации DPI должно быть установлено соответствующим образом.
Пример кода:Dim widthPx As Long Dim heightPx As Long Dim heightMM As Double TBarCode111.Dpi = 812.8 TBarCode111.SizeMode = eSizeMode_CustomModuleWidth TBarCode111.ModuleWidth = "312.5" heightPx = 500 heightMM = heightPx * (25.4 / TBarCode111.Dpi) widthPx = TBarCode111.BCWidthHdc2(0, 1000, heightMM * 1000, eMUPixel) TBarCode111.SaveImage "c:\temp\test2.tif", eIMTif, widthPx, heightPx, 812.8, 812.8
Подход 2
При втором, более простом подходе ширина модуля явно не задаётся. Вместо этого шириной модуля управляет коэффициент масштабирования, передаваемый в функцию GetOptimalBitmapSize (OCX API). Если вы используете этот подход, не задавайте пользовательскую ширину модуля и/или оптимальное разрешение в API. Эта функция выполняет дополнительное масштабирование (на основе dpi), которое перед вызовом функции следует отключить, установив DPI = 0.
Поскольку нам известно DPI принтера, нам также известен размер пикселя (точки принтера). Мы также знаем, что один модуль всегда должен быть целым числом, кратным одной точке принтера. Нужно учитывать, что обычно один модуль не должен быть меньше 0,190 мм (но это зависит от типа штрихкода). Тогда всё, что требуется сделать, — это передать коэффициент ScaleX = ШиринаМодуля/РазмерПикселя (= 8, 9, 10, …) в функцию GetOptimalBitmapSize и использовать возвращённые значения для SaveImage.
Ширина модуля: оптимальное значение 0,0123 дюйма составляет 10 пикселей при 812,8 dpi. Таким образом, коэффициент масштабирования для функции GetOptimalBitmapSize будет равен 10.
Пример кода:Dim width As Long Dim height As Long width = 1 height = 500 TBarCode111.Dpi = 0 'turn off additional dpi/96 scaling TBarCode111.GetOptimalBitmapSize 10, 10, width, height TBarCode111.SaveImage "c:\temp\test.tif", eIMTif, width, height, 812.8, 812.8