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
参考にされているのがメタファイルを印刷する場合の手順で
(これは自分も参考にしたページなので動作しますが)
印刷したいのがtif なのでメタファイルでは無いような・・・
画像の印刷であればこの辺を参考にしたほうがいいですね
https://www.petitmonte.com/bbs/answers?question_id=6094
すいません。
TImageに読み込んでから、先の手順は同じだと思ったので、
例を挙げさせて頂きました。
上記ソース例でPngは印刷できるのですが、
tifファイルがなぜか印刷出来ません。
教えていただいた例を見て、
Image1.Picture.Graphic⇒Image1.Picture.Bitmap
Printer.Canvas.StretchDraw(PrintRect,Image1.Picture.Bitmap);
に変更してみましたが、ダメですね。
最初の質問のコードをコピペして,実行してみました.
手元の 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;
もし,どうやっても印刷できないのであれば,印刷禁止となっている可能性も考えられるのではないでしょうか.
PDF に変換すると,その印刷禁止が解除されるため,印刷可能となるのかも知れません.
そもそもですが、そのプリンタは 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
Mr.XRAY様
ソースコードありがとうございます。
やってみましたが、手元のtif画像では、やはり空で印刷されます。
いろいろ探しましたが、
LibTiffDelphというコンポーネントを使用して
印刷できるようになりましたので
報告させて頂きます。
一旦別の形式に置き換えてくれるようなコンポーネントです。
http://galfar.vevb.net/imaging/smf/index.php?topic=273.0
テストプリンターでは印字できてますが、
DEKO様のおっしゃるようなトラブルも想定します。
ありがとうございました。
この掲示板を TIFF で検索した時の参考のこために,記事にしておきました.
[TIFF 形式画像の扱い]
http://ht-deko.minim.ne.jp/delphiforum/?vasthtmlaction=viewtopic&t=1153.0
そこで,ちよっと訊きたいのですが,印刷ができないという TIFF ファイルは,
TImage には表示できるのでしょうか.
Mr.XRAY様
TImageには直接画像を指定したら表示できました。
QuickReport、Fastreport上の画像表示VCLでもOkでした。
ただし、レポート上でプレビューを行うと消えます。
ちなみに拡張子は「tiff」ではなく「tif」です。
よろしくお願いします。
>TImageには直接画像を指定したら表示できました。
ありがとうございます.解決策を探しているわけではなく,単に知りかっただけです.スミマセン.
TImage の Canvas に描画できて,プリンタの Canvas に描画できないということは,
DEKO さんのレスにあるように,DIB 関係のような気がします.
TImage (の TBitmap) は DDB も DIB も表示可能ですから (CF_DIB は未サポート) .
最近のプリンタドライバは,どちらもサポートしていのが多いようです.
LibTiffDelph で可能なようですので,よろしいのではないかと思います.
アプリは動作してなんぼです.「勝てば官軍,動けば正義」です.
ツイート | ![]() |