Последние записи
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
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;[/code] тема на форуме
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)