FWIW, это очень плохая процедура генерации штрих-кода, и вы должны отказаться от нее и найти библиотеку, которая была специально написана для генерации этих штрих-кодов.
Какое разрешение контекста устройства используется для созданиярастровое изображение?
Судя по всему, ваш код использует контекст устройства экрана по умолчанию, который составляет 96 точек на дюйм.
Штрих-коды должны генерироваться с минимальным разрешением 300 точек на дюйм, предпочтительно 600 точек на дюйм ив идеале 2540 точек на дюйм.
При разрешении 96 точек на дюйм вы никогда не достигнете разрешения, необходимого для заданной точности.
Решение 1: Измените код, чтобы использовать контекст устройства принтера с высоким разрешением, и сделайте растровое изображение при этомразрешающая способность.В настоящее время ваш код просто использует произвольно вычисленную ширину.
Следующая проблема состоит в том, что код использует целочисленную ширину полосы и приводит к плавающей запятой (yikes!).Это становится проблемой при работе с низким dpi (даже с высоким dpi, но не так сильно), так как некоторые штрихи / пробелы могут занимать 2 пикселя, а некоторые - 3, поэтому в итоге вы получите штрих-код с неравными барами / пробелами.
Решение 2. Убедитесь, что все столбцы / пробелы, которые должны быть одинаковой ширины, имеют одинаковую ширину.
HTH