C#WPF-创建用户控件的Png图像文件会导致黑色图像

时间:2019-02-20 09:15:43

标签: c# wpf png

我在Scrollviewer中有一个Stackpanel,在其后面的代码中插入了Canvas元素。

每个画布元素都有一个图像和一些标签,可以在画布内部四处移动。 我想为每个画布中的每个标签创建一个Png图像。我的目标是稍后将这些Png图像插入到现有的pdf文件中。问题是我只得到黑色图像。

我已经用google和stackoverflow搜索过,但没有真正找到答案。

标签是按代码添加到“画布”的,而不是在xaml中创建的。我还尝试为每个画布(而不是标签)创建一个Png。第一个画布的图像已正确创建。但是第二个又是黑色的。

如果有人知道我在做什么错,我将非常感激。

foreach (Canvas canvas in StackPanel_Canvas_Container.Children)
            {
                foreach (object o in canvas.Children)
                {
                    if (o.GetType().Equals(typeof(Label)))
                    {
                        Label label = (Label)o;
                        label.Background = Brushes.Transparent;
                        label.Foreground = Brushes.Black;
                        label.UpdateLayout();
                        RenderTargetBitmap bitmap = new RenderTargetBitmap((int)label.ActualWidth, (int)label.ActualHeight, 96, 96, PixelFormats.Pbgra32);
                        bitmap.Render(label);
                        String path = System.IO.Path.Combine(Directory.GetCurrentDirectory(), "created_images");
                        if (!Directory.Exists(path))
                        {
                            Directory.CreateDirectory(path);
                        }
                        String tmp = string.Empty;
                        do
                        {
                            tmp = System.IO.Path.Combine(path, $"img_{++i}.png");
                        } while (File.Exists(tmp));


                        using (FileStream stream = File.Create(tmp))
                        {
                            PngBitmapEncoder encoder = new PngBitmapEncoder();
                            encoder.Frames.Add(BitmapFrame.Create(bitmap));
                            encoder.Save(stream);
                        }
                    }
                }
            }

0 个答案:

没有答案