كيفية دمج الطبقات وحفظ كصورة في برنامج الأغذية العالمي؟

StackOverflow https://stackoverflow.com/questions/1536547

  •  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);
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top