So, I use the following code to take an existing image, text from the input form, and then put the text from the input form on the existing image and save it as a new image:
using (FileStream output = new FileStream(match_outputFile, FileMode.Create)) { BitmapImage bitmap = new BitmapImage(new Uri(match_sourceFile, UriKind.Relative)); DrawingVisual visual = new DrawingVisual(); using (DrawingContext image = visual.RenderOpen()) { image.DrawImage(bitmap, new Rect(0, 0, bitmap.PixelWidth, bitmap.PixelHeight)); buildText(image, "text1", this.text1.Text); buildText(image, "text2", this.text2.Text); buildText(image, "text3", this.text3.Text); } RenderTargetBitmap target = new RenderTargetBitmap(bitmap.PixelWidth, bitmap.PixelHeight, bitmap.DpiX, bitmap.DpiY, PixelFormats.Default); target.Render(visual); BitmapEncoder encoder = new PngBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(target)); encoder.Save(output); }
As you can see, it calls the following function to draw text:
private void buildText(DrawingContext image, string settings, string input) { string[] setting = (Properties.Settings.Default[settings].ToString()).Split(','); FormattedText text = new FormattedText( input, System.Globalization.CultureInfo.InvariantCulture, FlowDirection.LeftToRight, new Typeface(new FontFamily(setting[0]), FontStyles.Normal, FontWeights.Bold, FontStretches.Normal), Convert.ToDouble(setting[5]), (Brush) new BrushConverter().ConvertFromString(setting[4]) ); text.MaxTextWidth = Convert.ToDouble(setting[8]); text.MaxTextHeight = Convert.ToDouble(setting[9]); Point position = new Point(Convert.ToDouble(setting[7]), Convert.ToDouble(setting[6])); switch (setting[2]) { case "center": position.X += (Convert.ToDouble(setting[8]) - text.Width) / 2; break; case "right": position.X += Convert.ToDouble(setting[8]) - text.Width; break; } switch (setting[3]) { case "middle": position.Y += (Convert.ToDouble(setting[9]) - text.Height) / 2; break; case "bottom": position.Y += Convert.ToDouble(setting[9]) - text.Height; break; } image.DrawText(text, position); }
Now I just need to ... I need to draw text2 (and ONLY text2) in ANGLE from a central position. The central position is simple, it will be:
centerX = (setting[8] - setting[7]) / 2; centerY = (setting[9] - setting[6]) / 2;
So what if I wanted to draw this text at an angle of 30 degrees, rotated in the center? Remember, I want ONLY text 2 to rotate, and not other text, and not the original image source.