ベクターグラフィックスはスケーラブルですが、ラスターはスケーラブルではありません。
テキスト フォントはスケーラブルですが (ビットマップ フォントを使用しない限り)、ビットマップ上に文字列を描画すると、このテキストはラスター イメージになるため、それ以上スケーリングすることはできません。したがって、ビットマップ上にテキストを描画する必要がある場合は、大きな画像を使用し、アンチエイリアス処理されたテキストを使用してみてください (この画像も拡大縮小できませんが、十分に大きい場合は拡大する必要はありません)。
コードの修正版を次に示します (テキストは PNG 画像と同じ大きさになります)。
以下を追加しますusing
。
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.Drawing.Text;
次の行をフォームに (プライベート クラス フィールドとして) 追加します。
Random rnd = new Random();
コードの残りの部分:
int scl = rnd.Next(100, 451);
Bitmap bitmapimage = new Bitmap(2 * scl, scl);
Graphics bitmapGraphics = Graphics.FromImage(bitmapimage);
bitmapGraphics.CompositingMode = CompositingMode.SourceOver;
bitmapGraphics.TextRenderingHint = TextRenderingHint.AntiAlias; // text is now anti-aliased
bitmapGraphics.SmoothingMode = SmoothingMode.HighQuality;
bitmapGraphics.DrawString("test", new Font("Arial", scl * 9 / 10, GraphicsUnit.Pixel), Brushes.Black, new Point(0, 0));
bitmapimage.Save("Image.png", ImageFormat.Png);
bitmapGraphics.Dispose();
ところで、プリンターの Graphics オブジェクトにテキストを描画する場合、プリンターはピクセルを使用しないため、このテキストはスケーラブルです (ただし、プリンターの Graphics オブジェクトにラスター イメージを描画する場合、このイメージを拡大するとぼやけてしまいます)。 .