
No.3ベストアンサー
- 回答日時:
VCL(BorlandC++Builder付属のライブラリ)を使うサンプルです。
せっかく高価な開発環境を使っているのですから、用意されたライブラリは最大限利用しましょう。
VCLにおいて印刷はTPrinter::Canvasに対する描画です。だからTBitmap::Canvasに描画したのと同様の手法で印刷できます。
TPrint::PageWidth, PageHeightで印刷可能領域のピクセル幅、高さが取得できますので、印刷したいイメージの大きさと比較してちょうど収まるように拡大してTCanvas::StretchDraw()で描画すれば良いです。
//Graphics::TBitmap* mapの画像を印刷する
//画像の縦横比をたもち印刷可能領域いっぱいに拡大する
//プリンタの選択と設定は終わっているとする
//Graphics::TBitmap* mapは既に画像を読込み済みとする
TPrinter* ptr = Printer();
double h_ratio = double(ptr->PageHeight) / double(map->Height);
double w_ratio = double(ptr->PageWidth) / double(map->Width);
double ratio = h_ratio < w_ratio ? h_ratio : w_ratio;
ptr->BeginDoc();
ptr->Canvas->StretchDraw(
TRect ( 0, 0, map->Width * ratio, map->Height * ratio ),
map
);
ptr->EndDoc();
ご回答ありがとうございました。
ご指摘の通り用意されたライブラリは最大限利用しないといけ無かったです。
教えていただいた方法でなんとか思った事が出来るようになりました。
ありがとうございます。
No.2
- 回答日時:
すいません。
関数載せるの忘れてました。void __fastcall TfrmMain::StretchDrawBitmap(
TCanvas* canvas, const TRect& rect, Graphics::TBitmap* bitmap)
{
unsigned int infosize, imagesize;
GetDIBSizes(bitmap->Handle, infosize, imagesize);
BITMAPINFO* info = (BITMAPINFO*)new char[infosize];
char* image = new char[imagesize];
GetDIB(bitmap->Handle, bitmap->Palette, info, image);
int oldmode = SetStretchBltMode(canvas->Handle, COLORONCOLOR);
StretchDIBits(canvas->Handle, rect.Left, rect.Top,
(rect.Right - rect.Left), (rect.Bottom - rect.Top),
0, 0, info->bmiHeader.biWidth, info->bmiHeader.biHeight,
image, info, DIB_RGB_COLORS, SRCCOPY
);
SetStretchBltMode(canvas->Handle, oldmode);
delete [] image;
delete [] info;
}
ご回答ありがとうございます。
関数が必要だったんですね。
今試してみましたところ、印刷サイズにあった表示が出来ました。
ありがとうございます。
私の質問の書き方が悪かったので申し訳ございませんが、
今回印刷に試した画像は円(○)が入った画像だったのですが、印刷された
画像は楕円に引き伸ばされて印刷されました・・・。
出来れば丸は丸のままで印刷したいのですがいいほうほうないですか?
こちらの説明不足で大変申し訳ございません。
No.1
- 回答日時:
「TPrinterSetupDialog」で設定してから画像を印刷するはどうでしょうか?
こんな感じで↓
if (PrinterSetupDialog1->Execute() == false) return;
TPrinter* printer = Printer();
printer->BeginDoc();
StretchDrawBitmap(printer->Canvas, printer->Canvas->ClipRect, imgPaper->Picture->Bitmap);
printer->EndDoc();
ご回答ありがとうございます。
早速試してみたのですが、未定義の関数'StretchDrawBitmap'を呼び出した
とエラーが発生してしまいます。StretchDrawBitmapを定義しないといけないのでしょうか?もしそうなら定義方法を教えてもらえると幸いです。
よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Illustrator(イラストレーター) イラストレーターでの印刷について 3 2022/06/30 11:49
- その他(ソフトウェア) 写真の印刷レイアウトについて 13 2023/05/31 07:20
- プリンタ・スキャナー ブラザー プリンターMFC-J4720N 2 2022/07/17 20:10
- プリンタ・スキャナー RICOHオンデマンドで、手差しで中綴じ印刷をしたいです。 (A4の内容を用紙サイズA3で印刷したい 1 2022/10/14 14:29
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- その他(パソコン・周辺機器) Docuworks(ドキュワークス)の不具合について分かる方いたら教えてください。 ・A3やA4の異 1 2023/06/13 10:43
- プリンタ・スキャナー プリンター 印刷: 大きく印刷される 標準の1.5倍~2倍のサイズで用紙も1.5枚から2枚になり不経 2 2022/08/11 22:54
- Excel(エクセル) 請求書と領収書の作成 4 2022/11/10 16:13
- ゴミ出し・リサイクル 印刷した紙の処理について 部屋を片付けたところ、不必要な紙が大量に余ってしまいました。捨てるのは簡単 6 2022/03/26 16:56
- プリンタ・スキャナー 封筒印刷 差出人印刷ずれる 4 2022/05/01 10:12
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
2回以上PDFをコピーや印刷がで...
-
ActiveReportsの帳票印刷について
-
XMLがわかりやすく説明されてい...
-
バーコードについて
-
PHPでPDFファイルの直接印刷
-
VBAで印刷の成功判定
-
印刷ダイアログを表示させたくない
-
リンク先のページを印刷したい
-
数式が消える
-
プリンターを指定して印刷するには
-
「複数のwebページを印刷」を自...
-
Userform内のFrameのCaptionが...
-
PHPでExcelファイルを直接印刷...
-
画面サイズ以上のフォームの印刷
-
vbaでPDFファイルが印刷されない
-
B4で手差しトレイから印刷(V...
-
VBscriptでPDFファイルを直接印...
-
MSAccessのVBAで印刷時の並べ替...
-
VB.NET+ActiveReports で印刷...
-
印刷ダイアログを表示させない方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
印刷ダイアログを表示させない方法
-
vbaでPDFファイルが印刷されない
-
印刷ダイアログを表示させたくない
-
印刷要求順番と印刷出力順番が...
-
A4の2枚をA3の1枚にする編集方法?
-
オートメーションエラー(214741...
-
VBscriptでPDFファイルを直接印...
-
プリンターを指定して印刷するには
-
EXCELファイルの複数ダウンロー...
-
ACCESSで設定した帳票の用紙サ...
-
VB2005から複合機を使い自動FAX...
-
VBAで印刷スプール終了の判定を...
-
PHPでPDFファイルの直接印刷
-
2回以上PDFをコピーや印刷がで...
-
テキストファイル印刷 .net VB...
-
VBAで印刷の成功判定
-
VBでExcel印刷する時のプリンタ...
-
VB.NET+ActiveReports で印刷...
-
クリレポのプリンタ設定について
-
VB6上から印刷ダイアログを表示...
おすすめ情報