2012-08-22 43 views
4

所以我用下面的代碼,以利用現有的圖像,從輸入格式的文本,然後從輸入表單中的文本放置到現有的圖像,並將其保存爲新圖像:DrawText在DrawingContext中的角度?

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); 
} 

由於你可以看到,它調用下面的函數來繪製文本:

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); 
} 

現在我需要的是簡單的......我需要從中心位置的角度繪製文本2(且僅文本2)。中心位置是簡單的,那就是:

centerX = (setting[8] - setting[7])/2; 
centerY = (setting[9] - setting[6])/2; 

所以,如果我想畫這樣的文字,在-30度角什麼的中心位置旋轉?記住我只想旋轉文本2,而不是其他文本,而不是原始圖像源。

回答

7

在繪製文本之前,您可以簡單地將push a RotateTransform拖拽到DrawingContext上。繪製後,pop的變換。

buildText(image, "text1", this.text1.Text); 
image.PushTransform(new RotateTransform(angle, centerX, centerY)); 
buildText(image, "text2", this.text2.Text); 
image.Pop(); 
buildText(image, "text3", this.text3.Text); 
+0

工作完美...謝謝。 –