webentwicklung-frage-antwort-db.com.de

c # Text in Bitmap schreiben

Ich habe folgendes Problem. Ich möchte einige Grafiken in C # -Fenster erstellen. Ich möchte die Bitmap in mein Programm einlesen und danach etwas Text in diese Bitmap schreiben. Am Ende möchte ich, dass dieses Bild in PictureBox geladen wird. Und das ist meine Frage. Wie kann ich es tun?

beispiel, wie muss es funktionieren:

Bitmap a = new Bitmap(@"path\picture.bmp");
a.makeTransparent();
// ? a.writeText("some text", positionX, positionY);
pictuteBox1.Image = a;

Ist das möglich?

61
nirmus
Bitmap bmp = new Bitmap("filename.bmp");

RectangleF rectf = new RectangleF(70, 90, 90, 50);

Graphics g = Graphics.FromImage(bmp);

g.SmoothingMode = SmoothingMode.AntiAlias;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
g.DrawString("yourText", new Font("Tahoma",8), Brushes.Black, rectf);

g.Flush();

image.Image=bmp;
127
danyolgiax

Sehr alte Frage, aber musste diese nur für eine App heute erstellen und stellte fest, dass die in den anderen Antworten gezeigten Einstellungen nicht zu einem sauberen Image führen (möglicherweise, da in späteren .NET-Versionen neue Optionen hinzugefügt wurden).

Angenommen, Sie möchten den Text in der Mitte der Bitmap haben, können Sie Folgendes tun:

// Load the original image
Bitmap bmp = new Bitmap("filename.bmp");

// Create a rectangle for the entire bitmap
RectangleF rectf = new RectangleF(0, 0, bmp.Width, bmp.Height);

// Create graphic object that will draw onto the bitmap
Graphics g = Graphics.FromImage(bmp);

// ------------------------------------------
// Ensure the best possible quality rendering
// ------------------------------------------
// The smoothing mode specifies whether lines, curves, and the edges of filled areas use smoothing (also called antialiasing). 
// One exception is that path gradient brushes do not obey the smoothing mode. 
// Areas filled using a PathGradientBrush are rendered the same way (aliased) regardless of the SmoothingMode property.
g.SmoothingMode = SmoothingMode.AntiAlias;

// The interpolation mode determines how intermediate values between two endpoints are calculated.
g.InterpolationMode = InterpolationMode.HighQualityBicubic;

// Use this property to specify either higher quality, slower rendering, or lower quality, faster rendering of the contents of this Graphics object.
g.PixelOffsetMode = PixelOffsetMode.HighQuality;

// This one is important
g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;

// Create string formatting options (used for alignment)
StringFormat format = new StringFormat()
{
    Alignment = StringAlignment.Center,
    LineAlignment = StringAlignment.Center
};

// Draw the text onto the image
g.DrawString("yourText", new Font("Tahoma",8), Brushes.Black, rectf, format);

// Flush all graphics changes to the bitmap
g.Flush();

// Now save or use the bitmap
image.Image = bmp;

Verweise

28
Gone Coding

Sie müssen die Klasse Graphics verwenden, um in die Bitmap schreiben zu können.

Speziell eine der DrawString Methoden.

Bitmap a = new Bitmap(@"path\picture.bmp");

using(Graphics g = Graphics.FromImage(a))
{
  g.DrawString(....); // requires font, brush etc
}

pictuteBox1.Image = a;
13
Oded
var bmp = new Bitmap(@"path\picture.bmp");
using( Graphics g = Graphics.FromImage( bmp ) )
{
    g.DrawString( ... );
}

picturebox1.Image = bmp;
3
Ed S.

Wenn Sie wrap Ihren Text wünschen, sollten Sie Ihren Text in ein Rechteck zeichnen:

RectangleF rectF1 = new RectangleF(30, 10, 100, 122);
e.Graphics.DrawString(text1, font1, Brushes.Blue, rectF1);

Siehe: https://msdn.Microsoft.com/en-us/library/baw6k39s(v=vs.110).aspx

0
Babak