Укажите отработанное время

Отработанное время:
Продуктивное время:
Bug 140 - Неверная толщина линий в штрихкоде   Make a simular bug
Summary: Неверная толщина линий в штрихкоде
Status: CLOSED FIXED
Alias: None
Product: WINE@Etersoft
Classification: Продукты (Products)
Component: Общее (show other bugs)
Version: unspecified
Hardware: PC Linux
: P2 normal
Target Milestone: ---
Assignee: Vitaly Lipatov
QA Contact: Vitaly Lipatov
URL:
Whiteboard:
Keywords:
Depends on:
Blocks: 166
  Show dependency treegraph
 
In work:
Reported: 2006-05-25 18:07 MSD by Vitaly Lipatov
Modified: 2009-07-26 14:45 MSD (History)
0 users

See Also:
Заявки RT:
Связано с:
Дата напоминания:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Vitaly Lipatov 2006-05-25 18:07:52 MSD
имеется тестовая программа. Линии в штрихкоде одни тоньше чем надо, другие 
толще. 
кстати у линий концы разные на винде и под вайном - на винде кругленькие, под   
вайном прямоугольные.
Comment 1 Vitaly Lipatov 2006-05-25 18:20:43 MSD
Возможно что проблема с 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; 
 
Comment 2 Denis Philippov 2006-05-25 19:41:39 MSD
результат выполнения пользовательской программой функции polygon(array of 
points) вызывает генерацию в результирующем метафайле записи EMR_POLYGON16 а 
не EMR_POLYGON в следствии чего происходит потеря точности
Comment 3 Vitaly Lipatov 2006-05-26 13:59:58 MSD
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 то штрихкоды печатаются нормально. Почти.
 
линии штришкодов рисуются прямоугольниками и из-за того что при отрисовке не 
учитывается ширина линии обводки толстые штрихи отрисовываютя чуть выше чем 
тонкие.
Comment 4 Vitaly Lipatov 2006-06-23 21:35:06 MSD
Временно исправлено (pen.c.patch) 
Comment 5 Vitaly Lipatov 2006-08-30 16:58:21 MSD
исправление включено в 1.0.4