Hallo,
gibt es eine möglichkeit einen Text so wie es in einem Label formatiert worden ist in ein Bitmap zeichnen? Also nicht einfach g.DrawString?
bei "Windows Forms Anwendungen" gab es ja label.DrawToBitmap Funktion. Es ist bei WPF leider nicht mehr bei dem Label dabei. Gibt es da eine andere Lösung?
Das hilft dir evtl weiter
Gruß dat Tala
Danke. Das habe ich schon gesehen, aber leider verstehe ich nicht wie ich damit auf ein Bild zeichnen kann.
evtll hilft das hier weiter: http://www.vistax64.com/avalon/103701-using-wpf-generate-image.html
da wird zwar ein neues image erstellt - nur das
PngBitmapEncoder png = new PngBitmapEncoder();
png.Frames.Add(BitmapFrame.Create(rtb));
sieht aus als wenn man da auch bestehendes hinzufuegen kann
ok, ich habe es hin bekommen den Text aus einer TextBox auf ein Image mit folgendem Quelltext zu übertragen.
private void buttonSpeichern_Click(object sender, RoutedEventArgs e)
{
// Text to render on the image.
FormattedText text = new FormattedText(textBoxLogo.Text, new CultureInfo("en-us"),
textBoxLogo.FlowDirection,
new Typeface(textBoxLogo.FontFamily, textBoxLogo.FontStyle, textBoxLogo.FontWeight,
textBoxLogo.FontStretch),
textBoxLogo.FontSize,
textBoxLogo.Foreground);
// The Visual to use as the source of the RenderTargetBitmap.
DrawingVisual drawingVisual = new DrawingVisual();
DrawingContext drawingContext = drawingVisual.RenderOpen();
// bi ist ein BitmapImage
drawingContext.DrawImage(bi, new Rect(0, 0, bi.Width, bi.Height));
drawingContext.DrawText(text, new Point(bi.Height / 2, 0));
drawingContext.Close();
RenderTargetBitmap rtb = null;
// drawingVisual rendern
rtb = new RenderTargetBitmap((int)bi.Width, (int)bi.Height, 96, 96, PixelFormats.Pbgra32);
rtb.Render(drawingVisual);
rtb.Freeze();
image1.Source = rtb;
}
Das Problem dabei ist die nicht passende Auflösung. Der kleine Text auf dem Bild ist die TextBox, der große ist der übertragene Text. Ich möchte aber, dass der gezeichnete Text genau so aussieht wie der Text der TextBox im Moment des Zeichnens. Hat jemand eine Idee wie man die Auflösung angleichen kann?
Hier ein Bild:
mit rtb.Render(drawingVisual); wird auch das gezeichnete Image extrem unscharf. Finde leider keine Lösung für dieses Problem.
ok, die Unschärfe kam, weil man (bi.PixelWidth, bi.PixelHeight) und nicht (bi.Width, bi.Height) verwenden muss. Aber wie die Größe des Textes angepasst werden kann ist mir noch unklar.
Weiß vielleicht jemand wie ich die Position einer TextBox über einem Image herausfinden kann?? Im Designer sind bei der Textbox alle vier Margin Werte eingetragen. Wenn das Programm läuft ist die Oberfläche größer als im Designer die Margin Werte müßten sich also vergrößert haben, da die Abstände auf allen vier Seiten zu dem Rand größer sind. Die Margin werte bleiben aber zur Laufzeit immer gleich, unabhängig von der Größe des Fensters. Deswegen ist es unmöglich die Position der Textbox auf der Oberfläche zur Laufzeit genau zu bestimmen. 🙄