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