Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Растягивание изображения при печати

Delphi , ОС и Железо , Принтеры и Печать

Растягивание изображения при печати

Я пишу программу, которая печатает изображение на принтере с помощью объекта TPrinter. Проблема происходит когда я пытаюсь "растянуть" изображение до требуемого размера на бумаге. Мой метод растяжения (bitblts и принтерном DC) приводит к белым кляксам, а само изображение получается практически серым. Конечно это не то, что мне хотелось. Кто-нибудь может мне помочь?

Попробуй это:


procedure DrawImage(Canvas: TCanvas; DestRect: TRect; ABitmap:
  TBitmap);
var
  Header, Bits: Pointer;
  HeaderSize: Integer;
  BitsSize: Longint;
begin
  GetDIBSizes(ABitmap.Handle, HeaderSize, BitsSize);
  Header := MemAlloc(HeaderSize);
  Bits := MemAlloc(BitsSize);
  try
    GetDIB(ABitmap.Handle, ABitmap.Palette, Header^, Bits^);
    StretchDIBits(Canvas.Handle, DestRect.Left, DestRect.Top,
      DestRect.Right, DestRect.Bottom,
      0, 0, ABitmap.Width, ABitmap.Height, Bits, TBitmapInfo(Header^),
      DIB_RGB_COLORS, SRCCOPY);
    { вам может понадобиться цветовой стандарт DIB_PAL_COLORS,
    но это уже выходит за рамки моих знаний. }
  finally
    MemFree(Header, HeaderSize);
    MemFree(Bits, BitsSize);
  end;
end;

{ Печатаем изображение, растягивая его до целого листа }

procedure PrintBitmap(ABitmap: TBitmap);
var
  relheight, relwidth: integer;
begin
  screen.cursor := crHourglass;
  Printer.BeginDoc;
  if ((ABitmap.width / ABitmap.height) > l(printer.pagewidth /
    printer.pageheight)) then
  begin
    { Растягиваем ширину изображения до ширины бумаги }
    relwidth := printer.pagewidth;
    relheight := MulDiv(ABitmap.height, printer.pagewidth, ABitmap.width);
  end
  else
  begin
    { Растягиваем высоту изображения до высоты бумаги }
    relwidth := MulDiv(ABitmap.width, printer.pageheight, ABitmap.height);
    relheight := printer.pageheight;
  end;
  DrawImage(Printer.Canvas, Rect(0, 0, relWidth, relHeight), ABitmap);
  Printer.EndDoc;
  screen.cursor := crDefault;
end;

Старая проблема растяжения изображений при печати!

Я рад помочь вам разобраться в этом вопросе.

В первую очередь, ваш код выглядит хорошо overall. Вы используете функцию StretchDIBits для растяжения изображения, что является хорошим подходом. Однако, есть несколько потенциальных проблем, которые могут вызвать этоissue:

  1. Формат изображения: Убедитесь, что изображение находится в формате, который может быть растянут (например, BMP, PNG). Если изображение имеет прозрачный фон, вам может потребоваться конвертация его в не прозрачный формат.
  2. Количественность цвета: Убедитесь, что колличественность цвета изображения соответствует колличественности цвета принтера. Если изображение имеет более высокую колличественность цвета, чем поддерживает принтер, это может вызвать проблемы при печати.
  3. Алгоритм растяжения: Функция StretchDIBits использует по умолчанию алгоритм растяжения, который может не быть подходящим для всех изображений. Вы можете попробовать использовать другие алгоритмы, передавая различные значения параметру dwStretchMode (например, STR_ CP_STRETCH или STR_CP_SCALE).
  4. Настройки принтера: Проверьте настройки принтера, чтобы убедиться, что они установлены правильно. Например, убедитесь, что качество печати установлено на подходящем уровне для размера и разрешения изображения.

Чтобы помочь вам лучше, я хотел бы узнать больше о конкретных проблемах, которые вы испытываете:

  • Какие типы изображений вы пытаетесь напечатать (например, фотографии, графики, текст)?
  • Какова размерность и разрешение оригинального изображения?
  • Какова размерность и разрешение печатаемого изображения?
  • Бывают ли ошибки или предупреждения при печати?

Кроме того, я рекомендую попробовать следующее:

  • Используйте другой алгоритм растяжения (например, STR_CP_STRETCH или STR_CP_SCALE) и посмотрите, улучшится ли результат.
  • Попробуйте напечатать изображение в другом формате (например, PNG вместо BMP).
  • Проверьте настройки принтера и измените их, если необходимо.

Если вы предоставите больше информации о вашей конкретной проблеме, я постараюсь помочь вам разобраться и найти решение.

В статье описывается проблема растяжения изображения для печати на принтере с помощью объекта TPrinter и предлагается метод использования функции StretchDIBits для решения этой проблемы.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Принтеры и Печать ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-06-02 10:20:12
2024-07-27 12:17:29/0.0038778781890869/0