PDA

View Full Version : سوال: ذخیره RichTextbox به صورت عکس



R_khaleghi
یک شنبه 17 شهریور 1392, 21:06 عصر
سلام به همه

یه برنامه نوشتم که اطلاعاتی رو از کاربر میگیره و ذخیره میکنه.
داخل فرمم یه Richtextbox هست می خوام متنی که داخل اون نوشته میشه رو به فرمت jpg و ... (فرمت عکس) توو یه مسیری ذخیره کنم.

کسی میدونه باید چه کار کنم؟

با تشکر.

programerinfonet
یک شنبه 17 شهریور 1392, 22:20 عصر
بفرما

SaveUIAsGraphicFile()


public BitmapSource FlowDocumentToBitmap(FlowDocument document, Size size)
{
document = CloneDocument(document);

var paginator = ((IDocumentPaginatorSource)document).DocumentPagin ator;
paginator.PageSize = size;

var visual = new DrawingVisual();
using (var drawingContext = visual.RenderOpen())
{
// draw white background
drawingContext.DrawRectangle(Brushes.White, null, new Rect(size));
}
visual.Children.Add(paginator.GetPage(0).Visual);

var bitmap = new RenderTargetBitmap((int)size.Width, (int)size.Height,
96, 96, PixelFormats.Pbgra32);
bitmap.Render(visual);
return bitmap;
}

public FlowDocument CloneDocument(FlowDocument document)
{
var copy = new FlowDocument();
var sourceRange = new TextRange(document.ContentStart, document.ContentEnd);
var targetRange = new TextRange(copy.ContentStart, copy.ContentEnd);

using (var stream = new MemoryStream())
{
sourceRange.Save(stream, DataFormats.XamlPackage);
targetRange.Load(stream, DataFormats.XamlPackage);
}

return copy;
}


var doc = richTextBox.Document;
var bm = FlowDocumentToBitmap(doc, new Size(richTextBox.ActualWidth, richTextBox.ActualHeight));
var encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bm));

using (var stream = new FileStream("doc.jpg", FileMode.Create))
{
encoder.Save(stream);
}

مهرداد صفا
یک شنبه 17 شهریور 1392, 22:30 عصر
با سلام.
با استفاده از متود DrawToBitmap (http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k%28SYSTEM.WINDOWS.FORMS.CONTROL.DRAWTOBITMAP%29 ;k%28VS.OBJECTBROWSER%29;k%28TargetFrameworkMonike r-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22%29&rd=true) معمولا می توان کنترلها را داخل یک bitmap رسم کرد اما ظاهرا این متود برای کنترل RichTextBox پیاده سازی نشده.

در هر حال برای ذخیره یک RichTextBox در یک فایل Bitmap:
1- با استفاده از متودGraphics.Hwnd (http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k%28SYSTEM.DRAWING.GRAPHICS.FROMHWND%29;k%28VS.O BJECTBROWSER%29;k%28TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22%29&rd=true)و ارسال Handle کنترل به این متود و یا با استفاده از متود RichTextBox.CreateGraphics (http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k%28SYSTEM.WINDOWS.FORMS.CONTROL.CREATEGRAPHICS% 29;k%28VS.OBJECTBROWSER%29;k%28TargetFrameworkMoni ker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22%29&rd=true)یک Graphics بسازید.
2- با استفاده از تابع CreateCompatibleBitmap (http://msdn.microsoft.com/en-us/library/windows/desktop/dd183488%28v=vs.85%29.aspx) از Hdc شی Graphics ای که در مرحله قبلی ساختیم، یک Hbitmap را به صورت یک Intptr به دست بیاورید.
3- با استفاده از متود Bitmap.FromHbitmap (http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k%28SYSTEM.DRAWING.IMAGE.FROMHBITMAP%29;k%28VS.O BJECTBROWSER%29;k%28TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22%29&rd=true) یک Bitmap ساخته و با استفاده از متود Bitmap.Save (http://msdn.microsoft.com/en-us/library/9t4syfhh%28v=vs.100%29.aspx) آن را ذخیره کنید.