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!

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top