Головна сторінка
Top.Mail.Ru Яндекс.Метрика
Форум: "Основна";
Поточний архів: 2002.01.08;
Завантажити: [xml.tar.bz2];

Вниз

Проблемми з розмірами картинки при роздруківці Знайти схожі гілки


Oleg Gashev   (2001-12-15 11:14) [0]

Никак не получается распечать Image с точными размерами. Он все равно распечатывается неправильно.
Делаю я так. Нахожу размеры Bitmapa в inch:

sx,sy:real;
ABitmap:=Image1.Picture.Bitmap;
sx:=ABitmap.Width/GetDeviceCaps(image1.canvas.handle,LOGPIXELSX);
sy:=ABitmap.Height/GetDeviceCaps(image1.canvas.handle,LOGPIXELSY);


Теперь нахожу размеры в пикселах на принтере для распечатки:

relwidth:=trunc(GetDeviceCaps(Printer.canvas.handle,LOGPIXELSX)*sx);
relheight:=trunc(GetDeviceCaps(Printer.canvas.handle,LOGPIXELSY)*sy);


Печать:

Printer.BeginDoc;
DrawImage(Printer.Canvas, Rect(0, 0, relWidth, relHeight), ABitmap);
Printer.EndDoc;


DrawImage:

procedure DrawImage(Canvas: TCanvas; DestRect: TRect; ABitmap: TBitmap);
var Header, Bits: Pointer;
HeaderSize: Cardinal;
BitsSize: Cardinal;
begin
GetDIBSizes(ABitmap.Handle, HeaderSize, BitsSize);
Header := AllocMem(HeaderSize);
Bits := AllocMem(BitsSize);
try
GetDIB(ABitmap.Handle, ABitmap.Palette, Header^, Bits^);
StretchDIBits(Canvas.Handle, DestRect.Left, DestRect.Top, DestRect.Right, DestRect.Bottom, 0, 0, ABitmap.Width, ABitmap.Height, Bits,TBitmapInfo(Header^), DIB_RGB_COLORS, SRCCOPY);
finally
FreeMem(Header, HeaderSize);
FreeMem(Bits, BitsSize);
end;
end;


Все это печатает с неверными размерами. Где же ошибка?

З повагою Олег.



MrBeer   (2001-12-16 21:27) [1]

//Print bitmap X x Y millimeters size
procedure PrintBM(B:TBitmap;x_mm,y_mm:double);
var resx,resy:double;
begin
resx:=Printer.PageWidth/GetDeviceCaps(Printer.Handle,LOGPIXELSX);
resy:=Printer.PageHeight/GetDeviceCaps(Printer.Handle,LOGPIXELSY);
Printer.Canvas.StretchDraw(Rect(0,0,round(x_mm*resx),round(y_mm*resy)),B);
end;
//Print bitmap X x Y inch size
procedure PrintBMInch(B:TBitmap;x_inch,y_inch:double);
begin
PrintBM(B,x_inch*2.54,y_inch*2.54);
end;



MrBeer   (2001-12-16 21:40) [2]

procedure PrintSameSize(B:TBitmap);
var scalex,scaley:double;
begin
scalex:=GetDeviceCaps(Printer.Handle,LOGPIXELSX)/GetDeviceCaps(B.Canvas.Handle,LOGPIXELSX);
scaley:=GetDeviceCaps(Printer.Handle,LOGPIXELSY)/GetDeviceCaps(B.Canvas.Handle,LOGPIXELSY);
Printer.Canvas.StretchDraw(Rect(0,0,round(B.Width*scalex),round(B.Height*scaley)),B);
end;



MrBeer   (2001-12-16 21:48) [3]

A esli tak napisatj ?
//....
scalex:=GetDeviceCaps(Printer.Handle,LOGPIXELSX)/GetDeviceCaps(GetDC(0),LOGPIXELSX);
scaley:=GetDeviceCaps(Printer.Handle,LOGPIXELSY)/GetDeviceCaps(GetDC(0),LOGPIXELSY);



сторінки: 1 вся гілка

Форум: "Основна";
Поточний архів: 2002.01.08;
Завантажити: [xml.tar.bz2];

наверх









Пам'ять: 0.82 MB
Час: 0.025 c
3-21961
shakh
2001-12-03 20:29
2002.01.08
чи можуть бути в SQL порожні значення параметрів запиту


14-22396
Кречет
2001-11-02 09:54
2002.01.08
Сьогодні радісний день! Крім того, що п'ятниця ...


1-22213
T2
2001-12-16 07:14
2002.01.08
Secret Api & oth.


6-22282
Mamed
2001-10-08 10:08
2002.01.08
ПОМОЩ ПОМОЩ !!! до 01 / 11 Як Написати програму для роботи в Pocket CE?


1-22076
Змія
2001-12-19 12:50
2002.01.08
Як дізнатися дату випуску BIOS?





африкаанс албанський арабська вірменин азербайджанець баскський білоруський болгарська каталонський Китайська (спрощене письмо) Китайський традиційний) хорватський чеська данську мову нідерландський Ukranian естонець Філіппінська фінську мову французький
галісійська грузинський німецький грецький гаїтянський креольський давньоєврейську хінді угорський ісландський індонезієць ірландський італійський японський корейський латиська литовець македонець малайський мальтійський норвежець
перс полірування португальська румунський російська сербський словацький словенський іспанська суахілі шведську мову тайський турецька український урду в'єтнамський валлійський ідиш бенгальський боснійський
кебуано есперанто гуджараті хауса хмонг ігбо яванський каннада кхмерская Лао латинь маорі маратхі монгольський непальська панджабі сомалійський тамільська телугу йоруба
зулуський
Англійська Французький Німецький Італійський Португальська Русский Іспанська