كيفية دمج الطبقات وحفظ كصورة في برنامج الأغذية العالمي؟
-
20-09-2019 - |
سؤال
ولدي طبقتين. الطبقة الأولى هي تحكم صورة. مصدر هو صورة نقطية. وهذا هو طبقة الخلفية. ثانية واحدة، وهي طبقة الجبهة هو قماش الذي يمكنني رسم كائنات الهندسة (مثل خط، شكل متعدد الخطوط، المستطيل وغيرها) وخلفية من قماش شفافة. كيف يمكنني دمج هاتين الطبقتين وحفظه كصورة باستخدام WPF.
المحلول
وماذا تعني ب "الطبقات"؟ جلس الضوابط اثنين فقط في نفس الخلية من شبكة؟ إذا كان لديك كل من "طبقات" جلست في وعاء آخر (مثل الشبكة، أو حتى الإطار) ثم يمكنك استخدام RenderTargetBitmap مع تلك الحاوية للحصول على الصور الخاصة بك. لدي بعض التفاصيل، طريقة التمديد ل اتخاذ WPF "لقطات" على بلدي بلوق.
نصائح أخرى
ويمكنك الحصول على نقطية لوحة الأم الخاصة بك التي كنت قد وضعت السيطرة صورتك وقماش.
وكيف هي رمز للحصول على نقطية UIElement في برنامج الأغذية العالمي.
RenderTargetBitmap bmp = new RenderTargetBitmap(Width, Height, 96, 96, PixelFormats.Pbgra32);
bmp.Render(parentPanel);
واستخدام شيء من هذا القبيل، استدعاء هذا الأسلوب من قماش (وهذا هو قماش) -
private Bitmap ImageGenerator()
{
var transform = this.LayoutTransform;
// Call UpdateLayout to make sure changes all changes
// while drawing objects on canvas are reflected
var layer = AdornerLayer.GetAdornerLayer(this);
layer?.UpdateLayout();
// Get the size of canvas
var size = new System.Windows.Size(this.ActualWidth, this.ActualHeight);
// Measure and arrange the surface
// VERY IMPORTANT
this.Measure(size);
this.Arrange(new Rect(RenderSize));
RenderTargetBitmap renderBitmap =
new RenderTargetBitmap(
(int)this.ActualWidth,
(int)this.ActualHeight,
96d,
96d,
PixelFormats.Pbgra32);
renderBitmap.Render(this);
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
// push the rendered bitmap to it
encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
var stream = new MemoryStream();
encoder.Save(stream);
this.LayoutTransform = transform;
return new Bitmap(stream);
}