ورود

View Full Version : سوال: تبدیل کنترل به عکس



rasol_afkham
جمعه 01 آبان 1394, 17:37 عصر
با سلام خدمت دوستان:
چطور می توان از یک کنترل به همراه فرزندانش عکس گرفت و عکس مورد نظر را درون یک Image و یا ImageBrush ذخیره نمود و در برنامه استفاده نمود.
تو اینترنت گشتم و کدهای زیادی رو پیدا کردم. اما راستش جواب نداد
برای مثال کد زیر

RenderTargetBitmap rtb = new RenderTargetBitmap((int)control.ActualWidth, (int)control.ActualHeight, 96, 96, PixelFormats.Pbgra32);
rtb.Render(control);
PngBitmapEncoder png = new PngBitmapEncoder();
png.Frames.Add(BitmapFrame.Create(rtb));
MemoryStream stream = new MemoryStream();
png.Save(stream);
Image image = Image.FromStream(stream);

rasol_afkham
جمعه 01 آبان 1394, 17:50 عصر
دوستان عزیز تو آدرس زیر یه قطعه کد پیدا کردم که دقیقا همونی بود که می خواستم.گذاشتم تا بقیه هم استفاده کنند

http://www.vistax64.com/avalon/180411-save-wpf-control-png-image.html


public static ImageSource ToImageSource(FrameworkElement obj)
{
// Save current canvas transform
Transform transform = obj.LayoutTransform;
obj.LayoutTransform = null;

// fix margin offset as well
Thickness margin = obj.Margin;
obj.Margin = new Thickness(0, 0,
margin.Right - margin.Left, margin.Bottom - margin.Top);

// Get the size of canvas
Size size = new Size(obj.Width, obj.Height);

// force control to Update
obj.Measure(size);
obj.Arrange(new Rect(size));

RenderTargetBitmap bmp = new RenderTargetBitmap(
(int)obj.Width, (int)obj.Height, 96, 96, PixelFormats.Pbgra32);

bmp.Render(obj);

// return values as they were before
obj.LayoutTransform = transform;
obj.Margin = margin;
return bmp;
}