Конференция "Основная" » Качественная печать изображений [D5, D7]
 
  • Deltas © (23.01.12 18:09) [0]
    Есть объект bmp: TBitmap. В нем содержится изображение примерно 1100 х 900. При отображении картинки на экране (допустим в TImage) все красиво, но при печати качество изображения намного хуже. Разрешение страницы A4 принтера по умолчанию около 7000х5000, dpi = 600. Поэтому при печати на холст принтера я использую код

    Printer.BeginDoc;
    try
     Printer.Canvas.StretchDraw(Rect(0, 0, Printer.PageWidth, Printer.PageHeight), bmp);
    finally
     Printer.EndDoc;
    end;


    Как можно распечатать исходное изображение без кракозябр? То есть гладким, без ухудшения качества печати, вызванным необходимостью проецировать исходное изображение на страницу принтера.
  • han_malign (23.01.12 18:20) [1]
    GetBrushOrgEx(Canvas.Handle, pt);
    SetStretchMode(Canvas.Handle, HALFTONE);
    SetBrushOrgEx(Canvas.Handle, pt.x, pt.y, nil);
  • QAZ (23.01.12 18:57) [2]

    > Как можно распечатать исходное изображение без кракозябр?
    >  То есть гладким, без ухудшения качества печати

    взять изображение соответствующего размера,и напечатать
  • Deltas © (23.01.12 19:33) [3]

    > han_malign   (23.01.12 18:20) [1]
    > GetBrushOrgEx(Canvas.Handle, pt);
    > SetStretchMode(Canvas.Handle, HALFTONE);
    > SetBrushOrgEx(Canvas.Handle, pt.x, pt.y, nil);


    Поэксперементировал, никаких визуально заметных изменений нет.


    > QAZ   (23.01.12 18:57) [2]
    >
    > взять изображение соответствующего размера,и напечатать


    Ох, откуда же я его возьму? Я же написал, что есть исходное изображение 1100х900. Это условие задачи.
  • QAZ (23.01.12 19:59) [4]

    > Ох, откуда же я его возьму? Я же написал, что есть исходное
    > изображение 1100х900. Это условие задачи.

    перерисуй,найди исходник
    условие задачи из гна сделать конфетку или че?
    для кач. печати должно быть 300дпи при нужном размере,все что ниже - плохо, выше - не  имеет смысла
  • Deltas © (23.01.12 20:24) [5]

    > QAZ   (23.01.12 19:59) [4]

    Нельзя ничего перерисовать. Изображение - это входной сигнал. Представь, что это учебная задача.
  • QAZ (23.01.12 20:29) [6]
    удачи
  • kudatsky (24.01.12 12:23) [7]
    Загрузи картинку в Word и распечатай.
    Сравни оба варианта. Может, дело не
    в программе ?
  • QAZ (24.01.12 14:58) [8]

    > Загрузи картинку в Word и распечатай

    чеж не в фотошоп то?
  • Дмитрий Белькевич (25.01.12 23:49) [9]
    мы у себя как то так печатаем...


    procedure PrintDIB(ACanvas: TCanvas; const DestRect: TRect; const DIB: TDIB); inline;
    var
    //  Image: Pointer;
    Pt: TPoint;
    begin
    GetBrushOrgEx(ACanvas.Handle, Pt);
    SetStretchBltMode(ACanvas.Handle, COLORONCOLOR);
    SetBrushOrgEx(ACanvas.Handle, Pt.x, Pt.y, @Pt);
    //  Image := ;
    StretchDIBits(ACanvas.Handle, DestRect.Left,
     DestRect.Top, // Destination Origin
     DestRect.Right - DestRect.Left, // Destination Width
     DestRect.Bottom - DestRect.Top, // Destination Height
     0, 0, // Source Origin
     DIB.Width, DIB.Height, // Source Width & Height
     DIB.PBits, DIB.BitmapInfo^, DIB_RGB_COLORS, SRCCOPY);
    end;

  • MultIfleX (26.01.12 07:48) [10]
    Используя для отрисовки GDI+, можно добиться неплохого сглаживания при растягивании изображения, если тебя волнует именно этот момент. Хотя, как то попадался и пример (на Delphi) масштабирования битмапа с бикубической интерполяцией...Но у тебя во первых непропорциональное масштабирование производится, во вторых - понизь DPI печати, ато ты ничего хорошего не получишь.  Да и маловато разрешение для печати на А4.. многого не ожидай.
  • Медвежонок Пятачок © (26.01.12 13:47) [11]
    При отображении картинки на экране (допустим в TImage) все красиво,

    Это оптический обман.
    Вызванный изображением построенным из светящихся точек.
    При этом глазу достаточно 72-96 дпи и он ничего не заметит.

    А на бумаге все сложнее. Точки не светятся, а отражают. И глаз здесь уже не обманешь.

    И при 600 dpi получим картинку 1.8 x 1.5 дюйма. И она будет такая же "хорошая " как и на экране.

    Так что правильный вопрос - это не как качественно напечатать, а как качественно заапскейлить исходник.

    Ответ: при таких размерах исходника - ну никак.
  • Дмитрий Белькевич (26.01.12 20:29) [12]
    >Ответ: при таких размерах исходника - ну никак.

    1100 х 900, насколько я помню, достаточно качественно напечатается на A4.

    Другое дело, что тут куча влияющих факторов - начиная от кода вывода заканчивая драйверами, качеством самого принтера и бумаги.
  • Медвежонок Пятачок © (27.01.12 08:59) [13]
    насколько я знаю, даже 1х1 достаточно качественно напечатается и на A3.

    и кучи никакой нет.
    есть один единственный вопрос - как отмасштабировать рисунок вверх.
  • Дмитрий Белькевич (27.01.12 17:21) [14]
    >насколько я знаю, даже 1х1 достаточно качественно напечатается и на A3.

    почему же ты пишешь:

    >Ответ: при таких размерах исходника - ну никак.

    То 1100х900 не достаточно, то 1х1 - достаточно?
  • Anatoly Podgoretsky © (27.01.12 17:33) [15]
    > Дмитрий Белькевич  (27.01.2012 17:21:14)  [14]

    1x1 будет качественно даже в виде анаморфа, а вот 1100х900 нет
  • Медвежонок Пятачок © (27.01.12 21:49) [16]
    почему же ты пишешь:

    потому что сарказм. что 1100 точек, что одна точка - разницы то нет.
    и то и это будет "достаточно" качественно на а4
 
Конференция "Основная" » Качественная печать изображений [D5, D7]
Есть новые Нет новых   [120365   +49][b:0][p:0.001]