J'ai un objet 2208 x 3000 TransformedBitmap avec le format {Indexed8} que je fais .CopyPixels(). J'utiliseMalheurs 'Stride' d'un objet TransformedBitmap
(int)((formattedBitmap.PixelWidth * formattedBitmap.Format.BitsPerPixel + 7)/8)
(en supposant « formattedBitmap » est le nom de l'image à partir de laquelle je suis en train de copier les pixels) pour la valeur « foulée » dans mon appel de méthode et un tableau d'octets qui est 2208 de longueur. J'ai quelque chose comme ça fonctionnant ailleurs dans le code (où le format de l'image est {Gray8}.) Cependant, là où j'essaye de faire la même chose sur l'image ci-dessus, je reçois continuellement un "Argument Out of Range" exception disant "La valeur du paramètre ne peut pas être inférieure à '6624000'. \ r \ nParameter name: buffer."
Mes questions à ce sujet sont les suivantes: pourquoi dans le monde exactement le même code semble-t-il fonctionner au même endroit et non pas l'autre? Qu'est-ce que dans le monde, en termes simples, est vraiment la «foulée» et comment puis-je obtenir l'effet désiré (de copier les bits) sans obtenir cette erreur? Que fais-je tort?
Toute aide à ce serait très apprécié.Merci beaucoup!
Oh, et MSDN a un article assez décent sur ce qu'est une «foulée». Ce n'est certainement pas un terme de "profane" et je le trouve un peu convulsé, mais c'est une bonne référence (un seul que vous aurez besoin de lire plusieurs fois pour vraiment comprendre si vous êtes nouveau dans le traitement d'image en C# (comme je suis!)) LINK: http://msdn.microsoft.com/en-us/library/aa473780(VS.85).aspx – JToland
Comme une personne qui a tendance à jeter un coup d'oeil sur le code (nous sommes tous pressés non?) J'ai vu votre calcul de foulée (le mauvais) et j'ai passé une demi-heure à essayer de le faire fonctionner avant de réaliser que vous aviez la formule correcte plus bas. Ce serait bien d'avoir la bonne formule en haut :) – Peter