画像ファイルの印刷方法

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
初心者13号

画像ファイルの印刷方法

#1 投稿記事 by 初心者13号 »

ウィンドウを持たないEXEかDLLでJPGやPNGファイルを読み込み、印刷するプログラムを作りたいのですが、画像ファイルの読み方と印刷方法を教えてください。

WinXpでは、下記のコードで足りていました。
WinVistaでは画像の上下の一部が切れてしまい、どうしてもうまく印刷できないので、shimgvw.dllに代わるソフトを作るしか無いと思っていますが、さっぱりわかりません。
初心者13号

#2 投稿記事 by 初心者13号 »

いろいろ調べましたがPNGが難しそうなので、外部DLLの力を借りてBMPに変換する事にしました。
(将来はDLLに頼りたくないので、ファイル変換部のみDLLを使用。)
変換後に、BMPを読み込みます。
おそらく、上記でBMPがメモリ上に読み込まれていると思います。

このあと、StretchDIBits() にてリサイズしながらプリンタのデバイス コンテキストに渡せば良いさそうなのですが、行き詰まってしまいました。
印刷方法を教えてください。
初心者13号

#3 投稿記事 by 初心者13号 »

実寸?(BitBltを使っての)印刷には成功しました。
StretchDIBitsを使ってリサイズする所で困っています。
lpBits(DIB のビットデータが格納されているバッファへのポインタ)の指定に
問題があると思うのですが、正しい指定方法がわかりません。

どなたか、助けてください。 VB.NETだと にて印刷できるんですね。(JPEGも可能)
恐ろしい・・・・
NoWest
記事: 264
登録日時: 2005年5月31日(火) 10:52
お住まい: 高知
連絡する:

#4 投稿記事 by NoWest »

StretchDIBits()にはBITMAP構造体ではなくBITMAPINFO構造体
(256色以下でなければBITMAPINFOHEADER構造体)を渡さないといけません。
あと、パラメータのlpBitsにはデバイスコンテキストではなくBITMAP構造体のbmBitsメンバを指定しないといけません。


と、いうより
そもそもStretchBlt()を使うのでは駄目なのですか?
メモリデバイスコンテキスト使っている辺りを見るとこちらが使いたいAPIなのではないかと思います。
初心者13号

#5 投稿記事 by 初心者13号 »

>>StretchDIBits()にはBITMAP構造体ではなくBITMAPINFO構造体
いろいろな構造体が有り、相互関係がわからなくなってコードが書けないので苦戦しています。
構造体って聞くと、拒否反応を示しながら使っている所が有るもんで・・・

>>そもそもStretchBlt()を使うのでは駄目なのですか?
こちらの方が簡単そうですね。
教えて頂いたAPIを試してから、勉強の為にStretchDIBitsを使ってみます。
返信する