Pregunta

I tienen dos capas. La primera capa es el control de imagen. La fuente de la misma es de Imagen Bitmap. Y esta es la capa de fondo. El segundo, que es la capa delantera es un lienzo en el que puedo dibujar objetos de geometría (tales como la línea, polilínea, rectángulo etc.) y el fondo de la lona es transparente.    ¿Cómo puedo combinar estas dos capas y guardarlo como una imagen utilizando WPF.

¿Fue útil?

Solución

¿Qué quiere decir con "Capas"? Sólo dos controles se sentaron en la misma celda de una red? Si tiene dos "capas" se sentó en otro recipiente (tal como una rejilla, o incluso la ventana), entonces usted puede utilizar RenderTargetBitmap con ese contenedor para obtener su imagen. Tengo algunos detalles, un método de extensión para teniendo WPF "Imágenes" en la mi blog.

Otros consejos

Usted puede obtener de mapa de bits de su panel de matriz en el que ha colocado su control de la imagen y el lienzo.

¿Cómo es el código para obtener el mapa de bits de UIElement en WPF.

 RenderTargetBitmap bmp = new RenderTargetBitmap(Width, Height, 96, 96, PixelFormats.Pbgra32);
bmp.Render(parentPanel);

usar algo como, llamar a este método desde el lienzo (esto es de lona) -

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);
    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top