Convertir une bitmapsource à l'image en gardant toutes les cadres
-
14-11-2019 - |
Question
J'ai une méthode ici qui est censée produire une instance System.Drawing.Mage.Considérez les prérequêtes suivantes:
- Je reçois un bitmapsource comme paramètre de méthode
- ci-dessous vous trouvez le code qui fait
la transformation de bitmapsource à l'image.
conversion:
public Image ConvertBitmapSourceToImage(BitmapSource input) { MemoryStream transportStream = new MemoryStream(); BitmapEncoder enc = new BmpBitmapEncoder(); enc.Frames.Add(BitmapFrame.Create(input)); enc.Save(transportStream); transportStream.Seek(0, SeekOrigin.Begin); return Image.FromStream(transportStream); }
Maintenant, imaginez que le bitmapsource a été créé à partir d'un fichier TIF multipage.Ce que je dois faire, c'est faire n'importe quelle nième page disponible en code.La classe Bitmapsource n'offre aucun support pour cela, alors savez-vous un moyen de l'obtention de la première image de mon contribution?Ou est-ce que BitMapsource a lu dans l'ensemble du TIF comme une seule image, perdant les informations de cadrage?
Si c'était possible, je pourrais ajouter un autre paramètre à ma signature de méthode, comme:
public Image ConvertBitmapSourceToImage(BitmapSource input, int frame) { ///[..] }
Des idées?
Merci d'avance!
La solution
Comme vous l'avez déjà dit, un bitmapsource ne prend pas en charge plusieurs cadres.Peut-être serait peut-être une option d'intervenir au point où la TIFF est décodée et convertit une image de chaque image:
TiffBitmapDecoder decoder = new TiffBitmapDecoder(...) // use stream or uri here
System.Drawing.Image[] images = new System.Drawing.Image[decoder.Frames.Count];
for (int i = 0; i < decoder.Frames.Count; i++)
{
// use your converter function here
images[i] = ConvertBitmapSourceToImage(decoder.Frames[i]));
}
Je n'ai pas testé le code ci-dessus, désolé pour les défauts.