我正在將Silverlight XAML發送到Web服務,該Web服務在STA線程中呈現XAML並生成PNG圖像。除了<image>
條目「正常顯示」以在WPF中設置其Source
屬性但PNG未顯示引用圖像時正確加載的所有XAML呈現正確外 - 我做錯了什麼?如何在後臺WPF過程中呈現<image>?
我使用的代碼的核心如下。 value
對象是Silverlight的DTO,其中包含字符串中的XAML,其結尾爲sXAML
本地屬性,圖像URI位於value.ImageURL
屬性中。
var canvas = (FrameworkElement)XamlReader.Load(new XmlTextReader(new StringReader(sXAML)));
var obj = canvas.FindName("BGImage");
Image img = null;
if (obj != null)
{
img = obj as Image;
img.ImageFailed += img_ImageFailed;
img.Source = new BitmapImage(new Uri(value.ImageURL, UriKind.Absolute));
}
canvas.Arrange(new Rect(new Size(463d, 381d)));
canvas.UpdateLayout();
var mem = new MemoryStream();
var bmp = new RenderTargetBitmap(463, 381, 96d, 96d, PixelFormats.Pbgra32);
bmp.Render(canvas);
var encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bmp));
encoder.Save(mem);
FileStream fs = new FileStream("D:\\out.png", FileMode.Create);
mem.WriteTo(fs);
fs.Close();
注:本img_ImageFailed
事件處理程序永遠不會調用表明img
源分配是成功的以某種方式。
仍然無法讓WPF呈現背景圖片 - 不用擔心。我將背景圖像加載到位圖中,並使用渲染的XAML位圖圖像對其進行了修改,併成功生成了所需的圖像。 – user22096 2009-01-10 17:31:52