我有这个函数,它是从按钮Click
事件处理程序调用的:
private void CreateFrame(Page page)
{
Frame newFrame = new Frame();
newFrame.Navigate(page);
// FramesHolder is a StackPanel with multiple Frames inside it
FramesHolder.Children.Add(newFrame);
// The size the page is 525x50
RenderTargetBitmap renderTargetBitmap =
new RenderTargetBitmap(525, 50, 96, 96, PixelFormats.Pbgra32);
renderTargetBitmap.Render(newFrame);
PngBitmapEncoder pngImage = new PngBitmapEncoder();
pngImage.Frames.Add(BitmapFrame.Create(renderTargetBitmap));
using (Stream fileStream = File.Create("Frame.png"))
{
pngImage.Save(fileStream);
}
}
问题是Frame.png
图像呈现黑色。怎么解决?感谢。
答案 0 :(得分:1)
我将renderTargetBitmap.Render(newFrame);
行更改为renderTargetBitmap.Render(page);
,并成功截取屏幕截图。
问题在于创建新框架。
我显示了一个页面,在Loaded事件中,我使用上面指定的更改调用了您的方法并且它有效。
public partial class Page2 : System.Windows.Controls.Page
{
public Page2()
{
InitializeComponent();
}
private void PG2_Loaded(object sender, RoutedEventArgs e)
{
CreateFrame(this);
}
private void CreateFrame(Page page)
{
Frame newFrame = new Frame();
newFrame.Navigate(page);
// The size the page is 525x50
RenderTargetBitmap renderTargetBitmap =
new RenderTargetBitmap(525, 50, 96, 96, PixelFormats.Pbgra32);
renderTargetBitmap.Render(page);
PngBitmapEncoder pngImage = new PngBitmapEncoder();
pngImage.Frames.Add(BitmapFrame.Create(renderTargetBitmap));
using (Stream fileStream = File.Create("c:\\Frame.png"))
{
pngImage.Save(fileStream);
}
}
}