Azure辅助角色中的WPF图像处理

时间:2012-07-31 20:50:28

标签: wpf image-processing azure

我在Azure辅助角色中使用WPF将多个图像合成为单个图像并保存到磁盘。在模拟器中一切运行良好,但是当我部署到Azure时,我希望看到缩放/调整大小的图像的区域是完全黑色的。

我将代码打包到控制台应用程序中,并使用远程桌面将其复制到托管辅助角色的同一实例。该应用程序运行完美。这告诉我,我需要能够运行我的代码的所有东西都出现在一个vanilla azure实例上。

在可能干扰WPF图像处理的辅助角色的上下文中运行有什么不同?

更新 这特别仅影响3D变换。在伪代码中,我正在做这样的事情:

  • 创建网格,应用纹理并将其添加到ModelVisual3D
  • 创建Viewport3DVisual,设置正交相机并添加ModelVisual3D
  • 将视口渲染为RenderTargetBitmap
  • 使用DrawingContext.DrawImage()RenderTargetBitmap绘制到。{1}}上   “场景画布”

当不需要3D时,图像会缩放并添加DrawingContext.DrawImage()。这工作正常。因此,该问题与从3D场景创建或使用RenderTargetBitmap有关。

更新 事实证明,当WPF不与桌面交互时,它不会呈现3D内容。模拟器在我的个人用户上下文中运行,而在Azure中,它作为系统帐户运行。通过创建以本地系统身份登录并执行相同步骤的Windows服务,可以在本地复制该问题。绕过这可能是一个巨大的挑战;我们可能不得不改用VM。

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

即使它在模拟器中工作正常,您是否可以尝试将WPF代码的ApartmentState更改为STA(在此处阅读WPF& STA:https://stackoverflow.com/a/1293433/384546)?

public class WorkerRole : RoleEntryPoint
{
    public override void Run()
    {
        Thread thread = new Thread(new ThreadStart(MyWPFCode));
        thread.SetApartmentState(ApartmentState.STA);
        thread.Start();

        while (true)
        {
            Thread.Sleep(10000);
        }
    }

    private void MyWPFCode()
    {
        // WPF code goes here.
    }
}