Главная страница
    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.45 MB
Время: 0.007 c
6-22271
Victor
2001-10-04 20:15
2002.01.08
при конекте не появлялось удаленное соединение????


1-22179
ikar
2001-12-21 09:10
2002.01.08
Как перебрать корневые узлы в TTreeView ?


14-22369
Victor Tsay
2001-11-08 09:11
2002.01.08
Как в редакторе Делфи смещать блоки текста?


3-21970
Chuk
2001-12-05 15:46
2002.01.08
Помогите с упаковкой


1-22077
Art
2001-12-18 17:19
2002.01.08
Вопрос к паскальщикам???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский