分享一个RTF转Image的方法,求高手优化

来源:互联网 发布:淘宝运费险退货流程 编辑:程序博客网 时间:2024/06/08 16:55

        /// <summary>
        /// rtf转image
        /// </summary>
        /// <returns></returns>
        public Image GetImageFromRtf()
        {
            if (this.SelectionType != RichTextBoxSelectionTypes.Object) return null;
            Graphics graphics = null;
            MemoryStream stream = null;
            Metafile metafile = null;
            try
            {
                var props = this.SelectedRtf.Split(new char[] { '\\' }, StringSplitOptions.RemoveEmptyEntries);

                int pich = int.Parse((from x in props where x.Contains("pich") select x).First<string>().Remove(0, 4));
                int picw = int.Parse((from x in props where x.Contains("picw") select x).First<string>().Remove(0, 4));
                // Get the horizontal and vertical resolutions at which the object is
                using (graphics = this.CreateGraphics())
                {
                    xDpi = graphics.DpiX;
                    yDpi = graphics.DpiY;
                }
                // Calculate the current width of the image in (0.01)mm
                int imageWidth = (int)Math.Round(picw * xDpi / HMM_PER_INCH);

                // Calculate the current height of the image in (0.01)mm
                int imageHeight = (int)Math.Round(pich * yDpi / HMM_PER_INCH);
                var lines = this.SelectedRtf.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                List<byte> imageBytes = new List<byte>();
                for (int i = 2; i < lines.Length - 1; i++)
                {
                    for (int j = 0; j < lines[i].Length; j+=2)
                    {
                        imageBytes.Add(Byte.Parse(new string(new char[] { lines[i][j], lines[i][j + 1] }),
                            System.Globalization.NumberStyles.HexNumber));
                    }
                }
                stream = new MemoryStream(imageBytes.ToArray());
                metafile = new Metafile(stream);
                Image img = metafile.GetThumbnailImage(imageWidth, imageHeight, null, IntPtr.Zero);
                return img;
            }
            finally
            {
                if (graphics != null)
                    graphics.Dispose();
                if (metafile != null)
                    metafile.Dispose();
                if (stream != null)
                    stream.Close();
            }
        }

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 华为麦芒4手机卡顿怎么办 华为麦芒4玩游戏卡怎么办 sim卡换卡通讯录丢了怎么办 换sim卡通讯录怎么办 麦芒4开不了机怎么办 麦芒5开不了机怎么办 麦芒6针丢了怎么办 麦芒6扬声器坏了怎么办 华为手机2s太卡怎么办 华为麦芒6网速慢怎么办 华为麦芒5太卡怎么办 小米note3拍照反应慢怎么办 华为刷机后还要账号密码怎么办 刷机后忘记华为账号和密码怎么办 荣耀7x耗电快怎么办 小米2s死机后怎么办? 电信合约卡不想用了怎么办 vivo合约机掉了怎么办 华为合约机丢了怎么办 两年合约机掉了怎么办 电信合约机丢了怎么办 s8合约机坏了怎么办 合约机的卡掉了怎么办 移动合约机屏幕碎了怎么办 5s用不了电信卡怎么办 vivo手机4g信号差怎么办 电信dns辅服务器未响应怎么办 笔记本wifi下载速度慢怎么办 苹果wifi下载速度慢怎么办 小米手机wifi下载速度慢怎么办 苹果8plus上网慢怎么办 小米5c死机了怎么办 苹果x自拍反方向怎么办 硅胶手机壳出油怎么办 指环扣松了怎么办图解 塑料放久了发粘怎么办 橡胶时间久了粘怎么办 胶的手机套变黄怎么办 手机壳硅胶变黄怎么办 硅胶手机壳大了怎么办 硅胶手机壳变大了怎么办