Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.07;
Скачать: CL | DM;

Вниз

Печать   Найти похожие ветки 

 
Far   (2003-07-25 00:21) [0]

Уважаемые! Подскажите самый простой способ масштабирования изображения типа TBitmap при выводе на принтер. Не хочется использовать готовые отчеты, но необходимо сохранить нормальный размер изображения на печати.


 
Marser ©   (2003-07-25 01:27) [1]

Если речь идет о сохранении пропорций рисунка, то проще не бывет: Image1.Proportional:=true


 
MBo ©   (2003-07-25 07:22) [2]

Canvas.StretchDraw
Stretchblt


 
Far   (2003-07-25 17:16) [3]

После применения Canvas.StretchDraw с масштабированием на коэфициент принтер/экран, рисунок получается в крапинку, а хотелось бы сохранить качество изображения


 
Song ©   (2003-07-25 17:17) [4]

Это скорей драйвер принтера глючит чем TCanvas


 
Far   (2003-07-25 17:34) [5]

Врядли. Принтер самый обычный (HP LaserJet 6L)


 
ggsoft ©   (2003-07-25 17:35) [6]

SetMapMode(), SetViewportOrgEx()...


 
Anatoly Podgoretsky ©   (2003-07-25 18:16) [7]

Far (25.07.03 17:34)
О знаменитые НР драйвера, чудо программисткого разума.


 
Far   (2003-07-25 22:17) [8]

А может про это можно где-то почитать, если примерчик дать влом?


 
KSergey ©   (2003-07-26 09:04) [9]

Подробности читать по ссылке
Собственно процедуру просто так даю, не претендуя на ее хорошесть. И вообще стырена из приведенного фака. Она универсальная для любого формата картинки, потому там и есть создание временного битмапа. Если картинка уже битмап - нифига промежуточного создавать не нужно. ARect - размер и оложение картинки в текущих координатах принтера

// печать картинок - эта ф-ция была взята за основу, теперь испоьзуется несколько переделанный вариант
// (c) wea@felten.co.at (Alexander Wernhart)
// On Tue, 4 Feb 1997 20:54:43 -0300, Ruy Ponce de Leon Junior <rplj@di.ufpe.br>
// http://doc.trecom.tomsk.su/Delphi/UnofficialDevelopersFAQ/pages/printer.htm
{ procedure PicturePrint(APic: TPicture; ARect: TRect);
var
Info: PBitmapInfo;
InfoSize, ImageSize: DWord;
Image: Pointer;
BitMap: TBitmap;
begin
Printer.Canvas.Brush.Style := bsClear; // сам добавил; не уверен, что надо
BitMap := TBitmap.Create; // весь дальнейший код работает только с Bitmap
try
BitMap.Assign (APic.Graphic);
GetDIBSizes (BitMap.Handle, InfoSize, ImageSize);
Info := AllocMem (InfoSize);
try
Image := AllocMem (ImageSize);
try
GetDIB (BitMap.Handle, 0, Info^, Image^);
CalcCardPrRect (n);
StretchDIBits (Printer.Canvas.Handle,
ARect.Left, ARect.Top, ARect.Right-ARect.Left, ARect.Bottom-ARect.Top,
0, 0, BitMap.Width, BitMap.Height,
Image, Info^, DIB_RGB_COLORS, SRCCOPY);
finally
FreeMem(Image, ImageSize);
end;
finally
FreeMem(Info, InfoSize);
end;
finally
BitMap.Free;
end;
end; // procedure PicturePrint
}


 
Far   (2003-07-26 15:17) [10]

to KSergey ©
Спасибо огромное за помощь и поддержку! Сейчас буду пробовать.



Страницы: 1 вся ветка

Текущий архив: 2003.08.07;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
3-20417
Eraser
2003-07-13 16:01
2003.08.07
Вопрос по LookUp-полям


14-20782
Карлсон
2003-07-22 00:51
2003.08.07
Война и Мир - вольные каменщики.


3-20448
qpwoeiruty
2003-07-17 14:46
2003.08.07
Как вызвать диалог Build Connection String в RunTime для ADO?


14-20803
VEG
2003-07-19 19:28
2003.08.07
Как можно получить имя и инфу об владельце IP


14-20712
REA
2003-07-23 14:11
2003.08.07
Крамер