2016-05-19 2 views
1

ラベルを印刷したい。印刷コンテキストGraphicsオブジェクトに描画すると、問題なく動作します。しかし、一時的なビットマップを使用すると、描画されたテキストはすべてピクセル化されます。 tempビットマップと印刷グラフィックスオブジェクトの解像度が異なることを認識しました(96 dpi対600 dpi)。そこで、ビットマップ解像度を印刷解像度に合わせて変更します。そのため、描画されたテキストはすべて大きすぎます。一時的なビットマップで高解像度を印刷

印刷する前にイメージを回転するには、一時的なビットマップが必要です。

このビットマップを正しく印刷する方法を教えてください。

Pixalatedコード:(悪いに見えますが、一時的なビットマップを持っている)

// print event handler 
    private void printPage(object sender, PrintPageEventArgs ev) 
    { 
     // size of the page 
     Size s = Form1.getPixelFromCM(Properties.Settings.Default.LabelSize); 
     // temporary bitmap object 
     Bitmap bmp = new Bitmap(s.Width, s.Height); 
     Graphics g = Graphics.FromImage(bmp); 
     // draw text 
     labels[printLabelsIndex].PrintLabel(g); 
     // draw the bitmap to the page 
     ev.Graphics.DrawImage(bmp, 0, 0); 
    } 

このコードは、このプリントを生成します。

enter image description here

高解像度コード:は(よさそうだけど私は一時的なビットマップが必要です!)

// print event handler 
    private void printPage(object sender, PrintPageEventArgs ev) 
    { 
     // draw text directly to print context 
     labels[printLabelsIndex].PrintLabel(ev.Graphics); 
    } 

このコードは、このプリントを生成します。

enter image description here

+1

ビットマップを6倍大きくする必要があります。それを6倍小さくします。 Graphics.Clear()を使用して背景色を設定することを忘れないでください。忘れてしまった場合、アンチエイリアスは正しく機能しません。これを正しい方法で行うだけで、Graphics.Transformプロパティを使って出力を回転させます。 Matrix.RotateAt()メソッドは便利な便利なメソッドです。 –

+0

Graphics.Clear()は良い点でした。 AAは今働きます。しかし、それは間違った解像度のためにまだピクセル化されています。 – Michael

答えて

0

それはそれは時々混乱につながるものの1は、パズルのすべてのピースが同じを持っていることを前提としたときにGraphics.DrawImageは、ビットマップの解像度を尊重するということは良いことです解像度..

ここでは、単純に画面の解像度を継承する場合は、明示的または他の一時的なビットマップの解像度を設定する必要があります..:

bmp.SetResolution(600,600) 
もちろん

今ラベルのサイズは、おそらく十分な大きさではありません。.. また

用語に問題があることを注意し

:解像度のサイズすなわちピクセルまたはプリンタのドットを意味しますが、本当に密度すなわち dpiまたは意味するべきであり「インチあたりのドット数を'

dpi

+0

しかし、印刷グラフィックスのピクセル解像度は高くありません。なぜBitmapオブジェクトに必要なのですか?これにより、図面がより複雑になります。 – Michael

+0

それはそうです。他のDrawXXXメソッドはすべてピクセル座標系で描画しますが、ButDrawImageはビットマップのdpiを使用します。あなたが2つの長方形で過負荷を使用することによってそれを防止しない限り。しかし、明らかに小さすぎるビットマップを吹き飛ばすことは助けにならないでしょう。 - 'labels [printLabelsIndex] .PrintLabel(g);'クラス/メソッドを知らないうちに、一般的なアドバイスを行う以外にはできません。 – TaW

+0

PrintLabel )は、g.DrawString()によって描画されるテキストを生成します。位置はすべてピクセルです。したがって、変更なしで両方の方法で動作することはありません。 1つの方法で物を描くことが可能であることを望んでいました。printLabel()はすべてのGraphicsオブジェクトを、すべてが最後に印刷するのと同じ方法で描画する必要があります。 – Michael

関連する問題