C# 为什么在代码隐藏中渲染图像不起作用?

C# 为什么在代码隐藏中渲染图像不起作用?,c#,helix-3d-toolkit,C#,Helix 3d Toolkit,我试图从helix控件生成屏幕截图,但只在代码隐藏中生成-为什么这不起作用? 少了什么 private void generate(){ ModelImporter=新的ModelImporter(); Model3D model=importer.Load(@“c:\test\test.obj”); Model3DGroup=新的Model3DGroup(); 组。子组。添加(模型); ModelVisual3D myModelVisual3D=新的ModelVisual3D(); myMod

我试图从helix控件生成屏幕截图,但只在代码隐藏中生成-为什么这不起作用? 少了什么

private void generate(){
ModelImporter=新的ModelImporter();
Model3D model=importer.Load(@“c:\test\test.obj”);
Model3DGroup=新的Model3DGroup();
组。子组。添加(模型);
ModelVisual3D myModelVisual3D=新的ModelVisual3D();
myModelVisual3D.Content=组;
HelixViewport3D查看器=新的HelixViewport3D();
viewer.Children.Add(myModelVisual3D);
Dispatcher.BeginInvoke(新操作(()=>
{
RenderTargetBitmap bmp=新的RenderTargetBitmap(1024、768、96、96,PixelFormats.Pbgra32);
渲染(查看器);
PngBitmapEncoder png=新的PngBitmapEncoder();
BitmapFrame=BitmapFrame.Create(bmp);
png.Frames.Add(frame);
使用(Stream stm=File.Create(@“c:\test\test.png”))
{
png.Save(stm);
}            }
),DispatcherPriority.ContextIdle,null);
}
编辑:


无异常-无-代码接缝正在工作,但PNG为空。如果我用XAML中的控件交换HelixViewport3D查看器,则生成PNG。使用代码中定义的HelixViewport3D,渲染不起作用,PNG为空-大小可以-它是PNG,但在显示时没有内容透明。
在这个test.obj文件中没有什么特别之处-当我使用XAML定义的HelixViewport3D时-一切都正常。

我知道有点晚了,但要找到满意的解决方案对我来说也不容易

我看到的主要原因是您没有将视口附加到窗口。 如果你像我一样根本不想看到任何窗口,有两种解决方案:

  • 黑胶溶液
    • 将视口放置在窗口中
    • 将窗样式设置为以下值:
    
    
  • 清洁溶液 按以下方式使用类HostVisual
  • this.hostVisual=new hostVisual();
    this.visualTargetPS=新的VisualTargetPresentationSource(hostVisual);
    this.renderTargetBitmap=新的renderTargetBitmap(宽度、高度、96、96、PixelFormats.Pbgra32);
    this.visualTargetPS.RootVisual=this.viewport;
    
    不会有任何渲染循环,但您可以手动触发一个渲染调用
    this.viewport.invalidatender()
    然后,每次要保存渲染时,只需调用以下命令:

    this.renderTargetBitmap.Render(this.viewport);
    var encoder=新的PngBitmapEncoder();
    Add(BitmapFrame.Create(renderTargetBitmap));
    使用(var stream=new FileStream(this.currentJob.ThumbnailPath,FileMode.Create))
    {
    编码器。保存(流);
    }
    
    那么会发生什么呢?有例外吗?只是“不工作”并不能告诉我们你能看到什么,或者你采取了什么诊断步骤来确定发生了什么。没有例外-什么都没有-代码接缝可以工作,但PNG是空的。如果我将HelixViewport3D查看器与XAML中的控件交换,则生成PNG。代码渲染中定义的HelixViewport3D不起作用,PNG为空。请编辑您的问题以表明这一点-详细说明。“空”是指文件的内容长度为0,还是指它是0x0有效图像,还是指它是大小正确但没有内容的图像?