一个程序猿

又不仅仅是一个程序猿

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
不是引用System.Drawing命名空间,采用Bitmap逐一像素复制的方法,而是使用WPF的各种变形(Transform)来实现。

 例子有两部分,Part1是文字处理,Part2是图片处理

            DrawingVisual dv = new DrawingVisual();
            DrawingContext dc = dv.RenderOpen();
//Part1
            var text = new FormattedText("测试",
                System.Globalization.CultureInfo.CurrentCulture,
                FlowDirection.LeftToRight,
                new Typeface(new FontFamily("黑体"), FontStyles.Normal, FontWeights.Normal, FontStretches.Normal), 20, new SolidColorBrush(Colors.Red));

            dc.PushTransform(new ScaleTransform(-1, 1) { CenterX = text.Width / 2 });//左右翻转 注意翻转中心为文字中心
            dc.DrawText(text, new Point(0, 0));
            dc.Pop();

            dc.DrawText(text, new Point(text.Width, 0));//再写一个不翻转的
//Part2
            ////对开门 = 一个门 + 一个左右翻转的门
            //BitmapImage bi = new BitmapImage(GetPackUri("简欧式门.jpg"));//图片是外部图片,图片的门把手在右边,并且门是对称的
            //Rect destR = new Rect(bi.PixelWidth, 0, bi.PixelWidth, bi.PixelHeight);
            //dc.PushTransform(new ScaleTransform(-1, 1) { CenterX = bi.PixelWidth + bi.PixelWidth / 2 });//翻转
            //dc.DrawImage(bi, destR);//画入

 

            //dc.Pop();//恢复
            //Rect destL = new Rect(0, 0, bi.PixelWidth, bi.PixelHeight);
            //dc.DrawImage(bi, destL);

            dc.Close();//不要忘记关
            RenderTargetBitmap rtb = new RenderTargetBitmap((int)Math.Ceiling(text.Width * 2), (int)Math.Ceiling(text.Height), 96.0, 96.0, PixelFormats.Default);//转成图片资源
            rtb.Render(dv);
            imgTest.Source = rtb;//图片控件显示

 

 

 

//wpf引用外部文件

        private Uri GetPackUri(string url)
        {

            string strUrl = "pack://siteoforigin:,,,";

            if (!url.StartsWith("/"))
            {
                strUrl += "/";
            }
            strUrl += url;
            return new Uri(strUrl, UriKind.RelativeOrAbsolute);
        }

 

 

 

posted on 2012-02-25 11:39  Old.T  阅读(9378)  评论(0编辑  收藏  举报