2010-08-03 46 views
2

如果有人可以給我一個關於如何使用它的例子,一個流? (不知道如何工作的)我知道如何創建一個URI現在我需要這個圖像轉換成WriteableBitmap一個BitmapImage,但我得到一個空異常錯誤像這樣的東西:WriteableBitmap在Silverlight 4中有新功能嗎?

BitmapImage image = new BitmapImage(new Uri("http://www.example.com/example.png")); 
WriteableBitmap newImage = new WriteableBitmap(image); 
+0

要從Web文件或資源流中填充WriteableBitmap和PNG圖像嗎? – 2010-08-04 07:36:30

+0

我在我想用來填充WriteableBitmap的網頁上有一個PNG,我不在乎如何。但是我需要修改圖像(在像素級別,PNG的8位會使它更容易)使用資源流更好嗎? – david 2010-08-04 13:56:42

+0

我剛編輯答案。 – 2010-08-05 08:46:08

回答

4

簡而言之:不,在Silverlight 4中沒有新功能。WriteableBitmapEx試圖彌補缺失的功能。

關於您的實際問題: 您應該爲BitmapImage.ImageFailed事件添加處理程序,以查看是否在下載圖像時發生錯誤。你應該在ImageOpened事件處理程序中創建WriteableBitmap。

var image = new BitmapImage(new Uri("http://www.example.com/example.png")); 
WriteableBitmap newImage = null; 
image.ImageOpened += (s, e) => newImage = new WriteableBitmap(image); 

請注意,跨域引用是允許的。有關詳細信息,請參見MSDN page您應該將圖像放入Web Project的ClientBin文件夾中,並使用相對路徑。

作爲一種替代方法,您也可以將圖像編譯爲資源並從中加載它。 WriteableBitmapEx有一個擴展方法來使這個任務變得更容易一些。但請記住,這會使組件規模增大,並且初始XAP加載時間將增加。

// Load an image from the calling Assembly's resources only by passing the relative path 
var writeableBmp = new WriteableBitmap(0, 0).FromResource("example.png"); 
+0

我試過你的想法,現在我沒有收到錯誤,但是我也沒有得到一個圖像..這意味着服務器不允許跨域請求?因此我無法做到這一點? – david 2010-08-04 13:54:09

+0

查看跨域調用的這兩個鏈接: http://weblogs.asp.net/jgalloway/archive/2008/12/12/silverlight-crossdomain-access-workarounds.aspx http://blogs.msdn.com /b/silverlightws/archive/2008/03/30/some-tips-on-cross-domain-calls.aspx – 2010-08-05 08:37:49

+0

兩者都不適合我。第一個代碼塊永遠不會調用ImageOpened處理程序;第二個拋出異常。我正在使用Silverlight 5。 – 2012-12-27 07:44:54