質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • C#

    9016questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Visual Studio

    2352questions

    Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

pictureBoxを印刷する際、プレビューにて縦横比がおかしくなる

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,851

ygoooo

score 59

フォームアプリケーションでpictureBoxを印刷しようとしているのですが、
プレビューにて縦に妙に引き延ばされてしまいます。

イメージ説明
↓プレビュー
イメージ説明

実際印刷をしていないのでこのままプリントされるかわかりませんが、
フォームで見ているpictureBoxそのままの比率でプレビュー表示、また印刷する方法をご教授お願いします。

//プレビュー
private void button1_Click(object sender, EventArgs e)
{
 System.Drawing.Printing.PrintDocument pd =new System.Drawing.Printing.PrintDocument();
 pd.PrintPage +=new System.Drawing.Printing.PrintPageEventHandler(printDocument1_PrintPage);
 PrintPreviewDialog ppd = new PrintPreviewDialog();
 ppd.Document = pd;
 ppd.ShowDialog();
}

//印刷
private void button2_Click(object sender, EventArgs e)
{
 PrintDocument pd = new PrintDocument();
 pd.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage);
 pd.Print();
}

//GOボタン(pictureboxに表示)
private void button3_Click(object sender, EventArgs e)
{
 //表示する文字列
 string print1 = textBox1.Text;
 string print2 = textBox2.Text;

 Bitmap canvas = new Bitmap(pictureBox1.Width, pictureBox1.Height);
 //ImageオブジェクトのGraphicsオブジェクトを作成する
 Graphics g = Graphics.FromImage(canvas);

 Font fnt = new Font("Arial", 25);
 StringFormat sf = new StringFormat();
 //文字列を描画するときの大きさを計測する
 SizeF stringSize = g.MeasureString(print1, fnt, 1000, sf);
 //取得した文字列の大きさを使って四角を描画する
 g.FillRectangle(Brushes.Black, 0, 0, stringSize.Width, stringSize.Height);

 //文字列を描画する
 g.DrawString(print1, fnt, Brushes.White, 0, 0, sf);
 g.DrawString('\n' + print2, fnt, Brushes.Black, 0, 0, sf);

 //リソースを解放する
 fnt.Dispose();
 sf.Dispose();
 g.Dispose();

 //PictureBox1に表示する
 pictureBox1.Image = canvas;
}

//printDocument
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
 var image = pictureBox1.Image;
 e.Graphics.DrawImage(image,e.MarginBounds);          
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

DrawImageで印刷可能領域を指定しており、imageの縦横比と、印刷可能領域の縦横比が異なるため、縦横比がおかしく印刷されています。
このため、DrawImageのサイズ指定を下記のように変えることで、縦横比が正しく表示されます。
(大きさは第4引数、第5引数で調整してください。)

e.Graphics.DrawImage(image, 0, 0, image.Width, image.Height);

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/07/25 15:14

    ありがとうございます。無事希望通りの表示になりました!

    キャンセル

同じタグがついた質問を見る

  • C#

    9016questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Visual Studio

    2352questions

    Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。