2009-05-28 4 views
7

J'utilise une bibliothèque de classes qui génère un grand ImageSource,> 3000x3750 pixels. Je voudrais convertir cette ImageSource en BitmapImage afin que je puisse tirer parti de DecodePixelWidth ou de DecodePixelHeight au lieu de le redimensionner chaque fois que cette image est générée.Convertir ImageSource en BitmapImage - WPF

Je dois d'abord afficher cette image pour l'utilisateur, et la plupart des utilisateurs ont une résolution d'écran de 1024x768, je lie cette ImageSource à un contrôle Image pour cela, mais on peut remarquer à quel point il est "lourd" est.

Comment est-ce que je peux faire ceci? Ou quelle est la meilleure solution pour ce cas?

merci!

Répondre

1

Le type BitmapImage hérite BitmapSource et, finalement, ImageSource (les deux étant des classes abstraites). Vous devez vérifier le type réel de votre objet, c'est-à-dire vérifier object.GetType().Name. Si vous avez de la chance, il se peut que vous retourniez un objet BitmapSource et vous aurez simplement besoin de le lancer sur ce type avant de pouvoir l'utiliser comme tel.

+0

Je l'ai fait, et il renvoie un ImageSource ... –

+0

@Hans: Avez-vous utilisé l'appel exact que j'ai spécifié dans mon message? Cela devrait vraiment retourner le type * réel * de l'objet, pas le type de base (ou le type de la variable). – Noldorin

+0

@Noldorin: oui, je l'ai fait, la documentation dit aussi que le type de retour est ImageSource ... merci –

16

Je sais qu'il est un ancien poste, mais essayez de faire:

myBitmapImage = myImageSource as BitmapImage; 

qui fonctionne bien.

+1

L'inverse de cela a fonctionné pour moi, converti de BitmapImage en ImageSource en le moulant. Merci! –

+0

Ça ne marche pas pour moi. – Butzke

+0

Si la distribution échoue ici, elle le fait silencieusement. donc si myImageSource ne peut pas être casté en BitmapImage, alors myBitmapImage sera 'null', j'utiliserais' myBitmapImage = (BitmapImage) myImageSource; 'car cela me donnerait au moins une exception si tout se casse en vrac. – Peter