目的を考えると (必要な Graphic.DrawRectangle を無視して)、最善の策は SVG を使用することです。SVG 形式は、実際には必要な画像を記述する XML ファイルであるため、サーバー側で生成し、テキストとして (クリントまたはサーバーのいずれかに) キャッシュすることができます。また、SVG はベクトル グラフィックス (名前が示すように*) を使用します。任意の解像度を許可します。
*: SVGは Scalable Vector Graphics の略です。
開始するには、SVG の 3w.org にあるこのチュートリアルをお勧めします。
SVG の例を次に示します。
HTML のインライン SVG
index.html
<!DOCTYPE html>
<html>
<head>
<title>SVG test</title>
</head>
<body>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<rect x="10" y="10" width="50" height="30" />
</svg>
</body>
</html>
img 要素の SVG
長方形.svg
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<rect x="10" y="10" width="50" height="30" />
</svg>
index.htm
<!DOCTYPE html>
<html>
<head>
<title>SVG test</title>
</head>
<body>
<img src="rectangle.svg" alt="rectangle" />
</body>
</html>
2 番目のオプション (別ファイル) をお勧めします。これはワーキング ドラフトであり、十分にサポートされているワーキング ドラフトであることに注意してください。そのため、ブラウザの互換性を確認してください。
SVG テキストを直接出力したくない場合もあります。その場合は、Drawing SVG in .NET/C#? を確認してください。ここ、StackOverflow で。