Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2011, 14:27   #1
Student-Koder
Пользователь
 
Регистрация: 24.11.2010
Сообщений: 14
По умолчанию Печать изображения

Добрый день.
Нарисовала график в image, сохранила в формате jpeg. А как его вывести на печать?

Заранее спасибо.
Student-Koder вне форума Ответить с цитированием
Старый 08.06.2011, 13:24   #2
Student-Koder
Пользователь
 
Регистрация: 24.11.2010
Сообщений: 14
По умолчанию

ну кто-нибудь .. помогите
Student-Koder вне форума Ответить с цитированием
Старый 08.06.2011, 14:29   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну например ShellExecute('print','d:\fotka.jpeg '... дальше не помню загляни в хелп

Кстати по-моему Image имеет методы распечатки.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.06.2011, 23:37   #4
nXs
Форумчанин
 
Регистрация: 26.02.2010
Сообщений: 126
По умолчанию

Я когда то использовал такой вот код, где то когда то нарыл в и-нете (печатал прямо из 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;
nXs вне форума Ответить с цитированием
Старый 14.06.2011, 13:55   #5
Student-Koder
Пользователь
 
Регистрация: 24.11.2010
Сообщений: 14
По умолчанию

Использовала другие функции, но там тоже присутствует "StretchDIBits".
Печатает, но с верхнего края листа, подскажите как разобраться с параметрами, чтобы сдвинуть рисунок вниз при печати..например на 40
Код:
  StretchDIBits(Canvas.Handle, DestRect.Left, DestRect.Top,
  DestRect.Right, DestRect.Bottom, // это как я поняла масштабирование?
  0, 0, ABitmap.Width, ABitmap.Height, Bits, TBitmapInfo(Header^),
  DIB_RGB_COLORS, SRCCOPY);
Student-Koder вне форума Ответить с цитированием
Старый 14.06.2011, 14:11   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
...DestRect.Left+40,DestRect.Top+40,DestRect.Right-40, DestRect.Bottom-40...
Типа такого ....
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.06.2011, 14:41   #7
Student-Koder
Пользователь
 
Регистрация: 24.11.2010
Сообщений: 14
По умолчанию

нет, не хочет сдвигаться пробывала изменить "0, 0" на "0, 40", но нижний край рисунка обрезается...
Student-Koder вне форума Ответить с цитированием
Старый 15.06.2011, 04:43   #8
volod3000
Форумчанин
 
Аватар для volod3000
 
Регистрация: 18.12.2008
Сообщений: 266
По умолчанию

http://www.codenet.ru/progr/delphi/s...mage_print.php

Мало открыть человеку глаза, большинство еще просит указать дорогу и ждет волшебного пенделя.
volod3000 вне форума Ответить с цитированием
Старый 15.06.2011, 08:05   #9
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

А может и не запариваться так сильно а распечатать с помощью FastReport
SERG1980 вне форума Ответить с цитированием
Старый 11.09.2012, 16:52   #10
komar_off
Новичок
Джуниор
 
Регистрация: 11.09.2012
Сообщений: 1
По умолчанию

Пршу прощения за поднятую тему, но как все же удалось решить проблему?
http://dewelopers.ru/
komar_off вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Печать изображения с PaintBox на всю страницу A4 chandrasecar Общие вопросы Delphi 0 11.01.2011 14:38
Сохранение заданий на печать в файл изображения JPG DimD Фриланс 1 15.04.2009 19:27
Чтение изображения из базы данных, Вместо изображения - "System.Byte[]" ruelCrow Общие вопросы .NET 3 10.07.2008 23:29
image. печать большого изображения на нескольких листах OLEG'arh Общие вопросы Delphi 1 20.06.2008 13:06
Печать изображения 1123 Общие вопросы Delphi 2 31.01.2007 20:45