次の問題があります。結合形式のようなビットマップ画像でグラフィックを作成したい
画像にテキストを書くことができます
しかし、私はさまざまな位置にもっとテキストを書く
Bitmap a = new Bitmap(@"path\picture.bmp");
using(Graphics g = Graphics.FromImage(a))
{
g.DrawString(....); // requires font, brush etc
}
テキストを書き込んで保存し、保存した画像に別のテキストを書き込むにはどうすればよいですか。
複数の文字列を描画するには、graphics.DrawString
を複数回呼び出します。描画された文字列の場所を指定できます。この例では、2つの文字列 "Hello"、 "Word"(赤色の "Hello"を前面に、 "Word"を赤色)で描画します。
string firstText = "Hello";
string secondText = "World";
PointF firstLocation = new PointF(10f, 10f);
PointF secondLocation = new PointF(10f, 50f);
string imageFilePath = @"path\picture.bmp"
Bitmap bitmap = (Bitmap)Image.FromFile(imageFilePath);//load the image file
using(Graphics graphics = Graphics.FromImage(bitmap))
{
using (Font arialFont = new Font("Arial", 10))
{
graphics.DrawString(firstText, arialFont, Brushes.Blue, firstLocation);
graphics.DrawString(secondText, arialFont, Brushes.Red, secondLocation);
}
}
bitmap.Save(imageFilePath);//save the image file
編集:「ロードを追加してコードを保存」。
Image.FromFile
いつでもビットマップファイルを開き、上記のコードを使用して新しいテキストを描画できます。その後、画像ファイルを保存しますbitmap.Save
Graphics.DrawString
の呼び出しの例は、 here から取得したものです。
g.DrawString("My\nText", new Font("Tahoma", 40), Brushes.White, new PointF(0, 0));
明らかに、Tahoma
というフォントがインストールされていることに依存しています。
Brushes
クラスには多くの組み込みブラシがあります。
Graphics.DrawString
のMSDNページも参照してください。
同じファイルへの変更を保存するには、 Jalal Said の回答と NSGaga の this の質問の回答を組み合わせる必要がありました。古いオブジェクトに基づいて新しいBitmapオブジェクトを作成し、古いBitmapオブジェクト、次に新しいオブジェクトを使用して保存します。
string firstText = "Hello";
string secondText = "World";
PointF firstLocation = new PointF(10f, 10f);
PointF secondLocation = new PointF(10f, 50f);
string imageFilePath = @"path\picture.bmp";
Bitmap newBitmap;
using (var bitmap = (Bitmap)Image.FromFile(imageFilePath))//load the image file
{
using(Graphics graphics = Graphics.FromImage(bitmap))
{
using (Font arialFont = new Font("Arial", 10))
{
graphics.DrawString(firstText, arialFont, Brushes.Blue, firstLocation);
graphics.DrawString(secondText, arialFont, Brushes.Red, secondLocation);
}
}
newBitmap = new Bitmap(bitmap);
}
newBitmap.Save(imageFilePath);//save the image file
newBitmap.Dispose();