Печать изображения
Печать изображения
. Использует модуль Printers.
Должно работать со всеми типами графики: битмепами, метафайлами и иконками.
(c) Alexey Torgashin, 2007
Последняя версия функции всегда доступна в исходниках компонента ATViewer:
http://atorg.net.ru/delphi/atviewer.htm
Параметры:
- AImage: TImage объект.
- ACopies: число копий (можно задать 0 для одной копии).
- AFitToPage: умещать картинку в страницу принтера. Если картинка меньше
страницы и AFitOnlyLarger=False, то картинка будет растянута.
- AFitOnlyLarger: разрешает умещать только картинки, бОльшие размера страницы.
- ACenter: центрировать картинку по странице.
- APixelsPerInch: число точек на дюйм на экране. Передавайте сюда значение
св-ва PixelsPerInch Вашей формы или объекта Screen.
- ACaption: заголовок задания печати в Print Manager.
-----------------------------------
Image printing. Uses Printers unit.
Should work with all graphics: bitmaps, metafiles and icons.
Parameters:
- AImage: TImage object.
- ACopies: number of copies (you may set 0 for a single copy).
- AFitToPage: fit image to a printer page. If image is smaller than a page and
AFitOnlyLarger=False then image will be stretched up to a page.
- AFitOnlyLarger: allows to stretch images smaller than a page.
- ACenter: center image on a page.
- APixelsPerInch: pass here value of PixelsPerInch property of your form or
of a Screen object (Screen.PixelsPerInch).
- ACaption: print job caption in Print Manager.
}
AImage: TImage;
ACopies: word;
AFitToPage,
AFitOnlyLarger,
ACenter: boolean;
APixelsPerInch: integer;
const ACaption: string): boolean;
var
bmp: TBitmap;
begin
bmp:= TBitmap.Create;
try
bmp.PixelFormat:= pf24bit;
{$ifdef ADV_IMAGE_CONV}
if not CorrectImageToBitmap(AImage, bmp, clWhite) then
begin
Result:= false;
Exit
end;
{$else}
with AImage.Picture do
begin
bmp.Width:= Graphic.Width;
bmp.Height:= Graphic.Height;
bmp.Canvas.Draw(0, 0, Graphic);
end;
{$endif}
Result:= BitmapPrint( //Declared below
bmp,
ACopies,
AFitToPage,
AFitOnlyLarger,
ACenter,
APixelsPerInch,
ACaption);
finally
bmp.Free;
end;
end;
function BitmapPrint(
ABitmap: TBitmap;
ACopies: word;
AFitToPage,
AFitOnlyLarger,
ACenter: boolean;
APixelsPerInch: integer;
const ACaption: string): boolean;
var
Scale, ScalePX, ScalePY, ScaleX, ScaleY: Double;
SizeX, SizeY,
RectSizeX, RectSizeY, RectOffsetX, RectOffsetY: integer;
i: integer;
Begin
Result:= true;
Assert(
Assigned(ABitmap) and (ABitmap.Width>0) and (ABitmap.Height>0),
'BitmapPrint: bitmap is empty.');
if ACopies = 0 then
Inc(ACopies);
with Printer do
begin
SizeX:= PageWidth;
SizeY:= PageHeight;
ScalePX:= GetDeviceCaps(Handle, LOGPIXELSX) / APixelsPerInch;
ScalePY:= GetDeviceCaps(Handle, LOGPIXELSY) / APixelsPerInch;
ScaleX:= SizeX / ABitmap.Width / ScalePX;
ScaleY:= SizeY / ABitmap.Height / ScalePY;
if ScaleX < ScaleY then
Scale:= ScaleX
else
Scale:= ScaleY;
if (not AFitToPage) or (AFitOnlyLarger and (Scale > 1.0)) then
Scale:= 1.0;
RectSizeX:= Trunc(ABitmap.Width * Scale * ScalePX);
RectSizeY:= Trunc(ABitmap.Height * Scale * ScalePY);
if ACenter then
begin
RectOffsetX:= (SizeX - RectSizeX) div 2;
RectOffsetY:= (SizeY - RectSizeY) div 2;
end
else
begin
RectOffsetX:= 0;
RectOffsetY:= 0;
end;
Title:= ACaption;
try
BeginDoc;
try
for i:= 1 to ACopies do
begin
Canvas.StretchDraw(
Rect(
RectOffsetX,
RectOffsetY,
RectOffsetX + RectSizeX,
RectOffsetY + RectSizeY),
ABitmap
);
if i < ACopies then
NewPage;
end;
finally
EndDoc;
end;
except
Result:= false;
end;
end;
end;
Взято с Vingrad.ru http://forum.vingrad.ru
Отправить комментарий