2010-08-03 1 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

웹 파일 또는 리소스 스트림에서 PNG 이미지로 WriteableBitmap을 채우시겠습니까? –

+0

WriteableBitmap을 채우기 위해 사용하려는 웹 페이지에 PNG가 있습니다. 어떻게 신경 쓰지 않습니다. 하지만 이미지를 수정해야합니다 (픽셀 수준에서 PNG의 8 비트는 더 쉽게 만들었을 것입니다). 리소스 스트림을 사용하는 것이 더 낫습니까? – david

+0

방금 ​​답변을 편집했습니다. –

답변

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을 참조하십시오. 이미지를 웹 프로젝트의 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

+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 –

+0

나를 위해 일하는 것도 아닙니다. 첫 번째 코드 블록에는 ImageOpened 처리기가 호출되지 않습니다. 두 번째 예외가 throw됩니다. Silverlight 5를 사용하고 있습니다. –