tif画像を印刷したい

解決


yamada  2013-05-13 21:01:04  No: 44544

http://www.geocities.jp/asumaroyuumaro/program/tips/Printer.html
を参考にしてtif画像の印刷するプログラムを作成してみました。

uses Printers;

procedure TForm1.Button1Click(Sender: TObject);
var
  PrintRect :TRect;
begin
  Image1.Picture.LoadFromFile('C:\12345.tif');
  PrintRect :=Bounds(GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX),
                   GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY),
                   GetDeviceCaps(Printer.Handle, HORZRES),
                   GetDeviceCaps(Printer.Handle, VERTRES));
  Printer.BeginDoc;
  try
    Printer.Canvas.StretchDraw(PrintRect,Image1.Picture.Graphic);
  except
    Printer.Abort;
    raise;
  end;

  Printer.EndDoc;
end;

こちらで印刷を行うと、
白紙で印字され、印刷されません。

PDFに変換するCubePDFというソフトを使用するときちんと表示されたPDFファイルが作成されます。
http://www.cube-soft.jp/cubepdf/

環境はXE3 PRO
Windows 7 Homeです。

わかりにくい文章ですみません。
どうぞよろしくお願いします。m(__)m


take  URL  2013-05-13 23:37:54  No: 44545

参考にされているのがメタファイルを印刷する場合の手順で
(これは自分も参考にしたページなので動作しますが)
印刷したいのがtif なのでメタファイルでは無いような・・・

画像の印刷であればこの辺を参考にしたほうがいいですね
https://www.petitmonte.com/bbs/answers?question_id=6094


yamada  2013-05-13 23:58:32  No: 44546

すいません。

TImageに読み込んでから、先の手順は同じだと思ったので、
例を挙げさせて頂きました。

上記ソース例でPngは印刷できるのですが、
tifファイルがなぜか印刷出来ません。

教えていただいた例を見て、
Image1.Picture.Graphic⇒Image1.Picture.Bitmap
Printer.Canvas.StretchDraw(PrintRect,Image1.Picture.Bitmap);
に変更してみましたが、ダメですね。


Mr.XRAY  URL  2013-05-14 02:04:44  No: 44547

最初の質問のコードをコピペして,実行してみました.
手元の Tiff 画像,シングル,マルチとも印刷できました.

Printer.Canvas.StretchDraw(PrintRect,Image1.Picture.Bitmap);

と,Picture.Bitmap にすると,マルチ Tiff は印刷できませんでした.空白となりました.
TIFF 画像には,いろいろな種類があります.それが影響しているのかも知れません.
http://sadoyama.sakura.ne.jp/world/htm/note/002_09_tif.htm

以下のコードではどうでしょうか.
手元の Tiff 画像では印刷できました.といっても,最初のコードも印刷できたのですが.
動作確認環境は,Windows 7 U64(SP1) + Delphi XE3 Pro VCL-32 です.

procedure TForm1.Button3Click(Sender: TObject);
var
  WIC       : TWICImage;
  PrintRect : TRect;
begin
  WIC := TWICImage.Create;
  try
    WIC.LoadFromFile(TIFFファイル名);
    Image1.Picture.Assign(WIC);
    Image1.Update;
    PrintRect :=Bounds(GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX),
                     GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY),
                     GetDeviceCaps(Printer.Handle, HORZRES),
                     GetDeviceCaps(Printer.Handle, VERTRES));
    Printer.BeginDoc;
    try
      Printer.Canvas.StretchDraw(PrintRect, WIC);
    except
      Printer.Abort;
      raise;
    end;

    Printer.EndDoc;
  finally
    WIC.Free;
  end;
end;


Mr.XRAY  2013-05-14 03:03:32  No: 44548

もし,どうやっても印刷できないのであれば,印刷禁止となっている可能性も考えられるのではないでしょうか.
PDF に変換すると,その印刷禁止が解除されるため,印刷可能となるのかも知れません.


DEKO  2013-05-14 03:16:43  No: 44549

そもそもですが、そのプリンタは StretchDraw (StretchBlt) 機能を保有しているのでしょうか?
GetDeviceCaps() でまず調べてみてください。

[GetDeviceCaps]
http://msdn.microsoft.com/ja-jp/library/cc428670.aspx
※ RASTERCAPS のトコです。

復活していて幸いだったのですが、中村さんのサイトに詳細があります。

[ビットマップがプリンタに印刷できない (中村の里)]
http://tknakamuri.web.fc2.com/tips004.htm

今時のプリンタだと、メーカが提供する最新のプリンタドライバを
インストールすれば直る事があります。

# メーカー名は伏せますが、CD-ROM の中のドライバはダメというのがありました。
# Web からの DL が必須だったという...(^^;A


yamada  2013-05-14 18:59:30  No: 44550

Mr.XRAY様
ソースコードありがとうございます。
やってみましたが、手元のtif画像では、やはり空で印刷されます。

いろいろ探しましたが、
LibTiffDelphというコンポーネントを使用して
印刷できるようになりましたので
報告させて頂きます。
一旦別の形式に置き換えてくれるようなコンポーネントです。
http://galfar.vevb.net/imaging/smf/index.php?topic=273.0

テストプリンターでは印字できてますが、
DEKO様のおっしゃるようなトラブルも想定します。

ありがとうございました。


Mr.XRAY  2013-05-15 00:26:00  No: 44551

この掲示板を TIFF で検索した時の参考のこために,記事にしておきました.

[TIFF 形式画像の扱い]
http://ht-deko.minim.ne.jp/delphiforum/?vasthtmlaction=viewtopic&t=1153.0

そこで,ちよっと訊きたいのですが,印刷ができないという TIFF ファイルは,
TImage には表示できるのでしょうか.


yamada  2013-05-15 23:50:57  No: 44552

Mr.XRAY様

TImageには直接画像を指定したら表示できました。

QuickReport、Fastreport上の画像表示VCLでもOkでした。
ただし、レポート上でプレビューを行うと消えます。

ちなみに拡張子は「tiff」ではなく「tif」です。

よろしくお願いします。


Mr.XRAY  2013-05-16 03:15:56  No: 44553

>TImageには直接画像を指定したら表示できました。

ありがとうございます.解決策を探しているわけではなく,単に知りかっただけです.スミマセン.
TImage の Canvas に描画できて,プリンタの Canvas に描画できないということは,
DEKO さんのレスにあるように,DIB 関係のような気がします.
TImage (の TBitmap) は DDB も DIB も表示可能ですから (CF_DIB は未サポート) .

最近のプリンタドライバは,どちらもサポートしていのが多いようです.
LibTiffDelph で可能なようですので,よろしいのではないかと思います.
アプリは動作してなんぼです.「勝てば官軍,動けば正義」です.


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加