S WPF pomalu začínám a narazil jsem na problém, kdy obrázek je načtený v databázi a já jej potřebuji načíst a dále s ním pracovat (konkrétně jej vytisknout ve formátu XPS spolu s dalšími daty).
V tomto případě je potřeba pro načtení obrázku do objektu třídy Image použít objekt třídy ImageSource, který odkazuje na načítaný obrázek. Pokud je obrázek uložen někde na disku, lze využít přímo konstruktor třídy ImageSource s přetížem, které má za parametr objekt třídy Uri s cestou k obrázku.
Tento postup však nelze použít, pokud jsou data uložena v databázy, protože jsou reprazentovaná jako poly byte[]. Po probdělém víkendu a nakopnutí na fóru Microsoftu jsem nakonec našel následující řešení. Pro načtení obrázku nakonec využívám objekty tříd MemoryStream a BitmapImage, kde třída BitmapImage je také poděděna od třídy BitmapSource a ta zas od třídy ImageSource, takže ji lze použít.
Celý kód je ve výsledku docela jednoduchý:
1: //data je typu byte[] a obsahuje data obrazku
2: MemoryStream ms = new MemoryStream(data);
3: BitmapImage bi = new BitmapImage();
4: bi.BeginInit();
5: bi.StreamSource = ms;
6: bi.EndInit();
7: BitmapSource bitmap = (BitmapSource)bi;