2011-08-12 2 views
1

실버 라이트 라이브러리에 이미지가 있어야하며 비트 맵에로드해야합니다. 나는 자원처럼 그것을 참조하기를 원하지만 그것에 대해 어떻게 할 지 확신하지 못한다. 이 라이브러리에는 xaml이 전혀 없지만 xaml을 사용하여 읽어야합니다.ImageLoaded 이벤트를 사용하지 않고 Silverlight C# 라이브러리의 파일에서 쓰기 가능한 비트 맵으로 이미지를 가져 오려면 어떻게해야합니까?

다음은 imageLoaded 이벤트를 사용하는 샘플 솔루션에서의 작업 방법입니다. (당신은 Silverlight가 비동기적인 것을 좋아하는 것을 알고 있습니다!) 이미지 속성은 항상 resource/copy로 설정됩니다.

public partial class MainPage : UserControl 
{ 
    WriteableBitmap myIcon = new WriteableBitmap(100, 100); 

    public MainPage() 
    { 
     InitializeComponent(); 
     LoadImages(); 

    } 

    public void LoadImages() 
    { 
     BitmapImage bmi = new BitmapImage(); 
     bmi.ImageOpened += ImagesLoaded; 
     bmi.CreateOptions = BitmapCreateOptions.None; 
     bmi.UriSource = new Uri(App.Current.Host.Source, "/ClientBin/HouseLogo.png"); 
    } 


    public void ImagesLoaded(object sender, RoutedEventArgs e) 
    { 
     BitmapImage bm = (BitmapImage)sender; 
     myIcon = new WriteableBitmap(bm); 
    } 

    private void btnPdf_Click(object sender, RoutedEventArgs e) 
    { 
     PDFdoc doc = new PDFdoc(32.0, 32.0, myIcon); 
    } 
} 

답변

4

이 우선이는 따라서 "콘텐츠"이미지가 유용하지 않은 실버 라이트 라이브러리라고, 당신은 "자원"을 지정이 라이브러리 프로젝트에 이미지에 대한 조치를 구축해야합니다. 따라서 이미지 리소스에 액세스해야하는 URL은 "/YourLibraryNameDllName;component/Images/HouseLogo.png"와 유사합니다. 프로젝트에서 "이미지"라는 폴더가있는 곳에서 dng에서로드하려는 png를 배치합니다.

이 코드를 사용하여 비동기 패턴없이 WriteableBitmap에 png를로드 할 수 있습니다.

StreamResourceInfo sri = Application.GetResourceStream(new Uri("/YourLibraryNameDllName;component/Images/HouseLogo.png", UriKind.Relative)); 
BitmapSource source = new BitmapImage(); 
source.SetSource(sri.Stream); 

WriteableBitmap myIcon = new WriteableBitmap(source); 
+0

감사합니다. 명확화를 위해 경로의 단어 "구성 요소"는 그대로 사용되며 아무 것도 대체되지 않습니다. –