Последние записи
- Как запустить программу указанную в Edit.Text
- Скачать файл с использованием потока
- Поиск слова в Memo
- Распаковщик формата .img из GTA San Andreas
- Подсчет количества повторяющихся букв в файле
- Простейший скрипт загрузки картинки с помощью php
- Рассылка. Выпуск 154
- Получение картинки с веб-камеры
- Скопировать определённый кусок image
- Сделать printscreen экрана и сохранить
16th
Июн
Как вывести изображение в image на печать?
Posted by Chas under Пост-обзор
Нарисовала график в image, сохранила в формате jpeg. А как его вывести на печать?
nXs:
Я когда то использовал такой вот код, где то когда то нарыл в и-нете (печатал прямо из TImage, но только битмапы, но в принципе перевести другой формат в битмап не проблема):
procedure PrintBitmap(ABitmap: TBitmap; Comment: string; UseComment: boolean);
var B: TBitmap;
isPrnPal: Boolean;
Pal, OldPal: hPalette;
PageWidth, PageHeight: Integer;
PageMargin: TPoint;
TestInt: Integer;
ImagePageWidth: Integer;
ImagePageHeight: Integer;
ScaleX, ScaleY, OffsetX, OffsetY: Integer;
ImageSize, InfoSize: DWord;
PImage, PInfo: Pointer;
TextSize:TSize;
begin
Pal := 0;
OldPal := 0;
Printer.BeginDoc;
B := TBitmap.Create;
B.Assign(ABitmap);
B.PixelFormat := pf24bit;
isPrnPal := False;
if (GetDeviceCaps(Printer.Canvas.Handle, RasterCaps) and RC_Palette) =
RC_Palette then
begin
B.PixelFormat := pf8bit;
Pal := CopyPalette(B.Palette);
OldPal := SelectPalette(Printer.Canvas.Handle, Pal, False);
isPrnPal := True;
end;
PageWidth := Integer(GetDeviceCaps(Printer.Canvas.Handle, HORZRES));
PageHeight := Integer(GetDeviceCaps(Printer.Canvas.Handle, VERTRES));
PageMargin.X := 0; PageMargin.Y := 0;
TestInt := Integer(GetPrintingOffset);
if Escape(Printer.Canvas.Handle, QUERYESCSUPPORT, SizeOf(TestInt),
@TestInt, nil) <> 0 then
begin
if Escape(Printer.Canvas.Handle, GETPRINTINGOFFSET, 0, nil,
@PageMargin) <= 0 then
begin
PageMargin.X := 0;
PageMargin.Y := 0;
end;
end;
ImagePageWidth := PageWidth-2*PageMargin.X;
ImagePageHeight := PageHeight-2*PageMargin.Y;
if ((ImagePageWidth <= ImagePageHeight) and (B.Width >= B.Height)) or
((ImagePageWidth > ImagePageHeight) and (B.Width < B.Height)) then
begin
ScaleX := ImagePageWidth;
ScaleY := Trunc(B.Height*ImagePageWidth/B.Width);
OffsetX := PageMargin.X;
OffsetY := (PageHeight div 2) - (ScaleY div 2);
end else
begin
ScaleY := ImagePageHeight;
ScaleX := Trunc(B.Width*ImagePageHeight/B.Height);
OffsetY := PageMargin.Y;
OffsetX := (PageWidth div 2) - (ScaleX div 2);
end;
GetDIBSizes(B.Handle, InfoSize, ImageSize);
GetMem(PImage, ImageSize);
GetMem(PInfo, InfoSize);
GetDIB(B.Handle, B.Palette, PInfo^, PImage^);
StretchDIBits(Printer.Canvas.Handle, OffsetX, OffsetY, ScaleX, ScaleY,
0, 0, B.Width, B.Height, PImage, PBitmapInfo(PInfo)^,
DIB_RGB_COLORS, SRCCOPY);
FreeMem(PImage); FreeMem(PInfo);
if isPrnPal then
begin
SelectPalette(Printer.Canvas.Handle, OldPal, False);
DeleteObject(Pal);
end;
if UseComment then
Begin
With Printer.Canvas do
Begin
Font.Name:='Arial';
Font.Size:=8;
TextSize:=TextExtent(Comment);
TextOut(OffSetX,OffsetY+ScaleY,Comment);
End;
End;
Printer.EndDoc;
end;

