имеется тестовая программа. Линии в штрихкоде одни тоньше чем надо, другие толще. кстати у линий концы разные на винде и под вайном - на винде кругленькие, под вайном прямоугольные.
Возможно что проблема с PlayEnhmetafile: procedure TMetafile.Draw(ACanvas: TCanvas; const Rect: TRect); var MetaPal, OldPal: HPALETTE; R: TRect; begin if FImage = nil then Exit; MetaPal := Palette; OldPal := 0; if MetaPal <> 0 then begin OldPal := SelectPalette(ACanvas.Handle, MetaPal, True); RealizePalette(ACanvas.Handle); end; R := Rect; Dec(R.Right); // Metafile rect includes right and bottom coords Dec(R.Bottom); PlayEnhMetaFile(ACanvas.Handle, FImage.FHandle, R); if MetaPal <> 0 then SelectPalette(ACanvas.Handle, OldPal, True); end;
результат выполнения пользовательской программой функции polygon(array of points) вызывает генерацию в результирующем метафайле записи EMR_POLYGON16 а не EMR_POLYGON в следствии чего происходит потеря точности
dlls/wineps/pen.c:67 if ((logpen.lopnStyle & PS_GEOMETRIC) || (physDev->pen.width > 1)) { physDev->pen.width = PSDRV_XWStoDS( physDev, physDev->pen.width ); if(physDev->pen.width < 0) physDev->pen.width = -physDev->pen.width; } если толщина линии меньше или равна 1 то преобразование логической толщины в реальную не происходит. если закоментировать if то штрихкоды печатаются нормально. Почти. линии штришкодов рисуются прямоугольниками и из-за того что при отрисовке не учитывается ширина линии обводки толстые штрихи отрисовываютя чуть выше чем тонкие.
Временно исправлено (pen.c.patch)
исправление включено в 1.0.4