Как получить изображение из файла в библиотеке silverlight C # в растровое изображение с возможностью записи без использования события ImageLoaded? - PullRequest
1 голос
/ 13 августа 2011

Мне нужно иметь изображение в моей библиотеке silverlight и загрузить его в растровое изображение. Я хочу просто сослаться на это как на ресурс, но не знаю, как это сделать. У меня вообще нет xaml в этой библиотеке, но то, что я читаю, указывает на то, что мне нужно сделать это с xaml.

Вот как я это сделал в примере решения с использованием события imageLoaded. (вы знаете, как silverlight просто любит асинхронные вещи!) Свойства изображения всегда устанавливаются в ресурс / копировать.

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 );
    }
}

1 Ответ

4 голосов
/ 13 августа 2011

Прежде всего, вы говорите, что это библиотека silverlight, поэтому изображения «Content» бесполезны, вам нужно будет указать действие сборки Resource для ваших изображений в этом проекте библиотеки.Следовательно, URL, который вам нужен для доступа к ресурсу изображения, выглядит примерно так: "/YourLibraryNameDllName;component/Images/HouseLogo.png".Там, где у вас есть папка в вашем проекте под названием «Изображения», куда вы помещаете эти png-файлы, которые вы хотите загрузить из вашей dll.

С этим вы можете загрузить png в WriteableBitmap без асинхронного шаблона.используя этот кусок кода.

 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);
...