Napisałem mały programik do generowania i rysowania kodu kreskowego Code128. Wszystko w sumie gra i buczy ale mam zagwozdkę z wymiarami objektu TMetafile.
Ze względów praktycznych funkcja rysująca kreski używa TMetafileCanvas jako płótna. Objekt TMetafile otrzymuje rozmiar w pikselach ... po zakończonym rysowaniu kopiuję wynik do Clipboard (Clipboard()->Assign(metafile)) ... wszystko OK.
I teraz to czego nie mogę załapać. Kiedy podaję docelową szerokość i wysokość kodu kreskowego, fukcja go kreśli i zwraca objekt TMetafile jako rezultat. Rezultat pakuję do schowka i wklejam w np.
MS. Visio. I tu dzieje się coś dziwnego a mianowicie kiedy zmieniam żądaną szerokość i wysokość, w pewnym przedziale szerokości zmienia się jedynie wysokość, a po przekroczeniu pewnej wartości szerokości, wklejony obrazek jest nagle dwa razy większy.
BarcodeImage->Height = pHeight;
std::auto_ptr<Code128> code128(new Code128(BarEdit->Text, WidthEdit->Text.ToInt(),
HeightEdit->Text.ToInt(), false,
CLB->Selected, true));
std::auto_ptr<TMetafile> meta(new TMetafile);
code128->DrawCodeToMetafile(meta.get());
BarcodeImage->Picture->Metafile->Assign(meta.get());
Clipboard()->Assign(meta.get());
Przykład :
szer. 106p, wys, 42p .... wklejony obrazek ma romiar 26,98 mm x 10,27 mm
szer. 108p, wys, 44p .... wklejony obrazek ma romiar 26,98 mm x 10,51 mm
szer. 110p, wys, 46p .... wklejony obrazek ma romiar 26,98 mm x 10,75 mm
szer. 112p, wys, 48p .... wklejony obrazek ma romiar 26,98 mm x 11,23 mm
... i nagle
szer. 114p, wys, 50p .... wklejony obrazek ma romiar 53,72 mm x 23,17 mm
Obrazek w programie powiększa się proporcjonalnie ...
Mógłby mnie ktoś oświecić o co tu chodzi? Wujek Google niewiele mi pomógł w temacie.
Pewnie sprawa jest dość prosta ... ale nie dla mnie.