Voyage à travers les pixels au format BMP
Salut j'ai un bmp
chargé d'une BMP
objet et im nécessaire pour voyager dans les pixels de l'image ci-dessus à partir de (1,1)
pixel (100,100)
px . à l'aide de getpixel()
méthode. J'utilisais était UN boucle, mais il n'a pas réussi .
Si im en utilisant le concept de tableau multidimensionnel de ce que devraient être les valeurs de la variable ?
- Vous pouvez toujours essayer... DEUX boucles, et voir si elles sont couronnées de succès... 🙂 Quelle question que vous vous posez? Comment parcourir un 2D-tableau de pixels, ou quelque chose sur les valeurs de la variable?
- Le schéma ressemble à toutes les lignes impaires sont parcourus de gauche à droite, et les evens de droite à gauche. C'est que l'objectif?
Vous devez vous connecter pour publier un commentaire.
print(row, col)
l'intérieur de la boucle pour les deux cas. En ligne-major de stockage que vous souhaitez exécuter sur chaque colonne d'une ligne avant de passer à la ligne suivante. L'ordonnance qui réalise cela? Pourquoi?row
que la boucle externe etcol
comme l'intérieur.cols
alors vous devriez être à l'aide de lax
variable etrows
devrait êtrey
. J'ai forké le code ici: ideone.com/IhT5dS. Comme vous pouvez le voir, la ligne-majeur a lax
variable (colonne) dans la boucle internebmp.UnlockBits(bmpData);
après avoir fait la copie.si vous voulez de la traverser à droite, à gauche, à droite, ... le tout dans une boucle, ce serait faire:
Vous devez utiliser deux boucles:
Vous froid utiliser Linq sélection pour obtenir un IEnumerable objet:
...puis itérer sur l'interface IEnumerable (à l'aide de typage implicite):
Vous pouvez la transformer en un facile-à-accès tableau multidimensionnel de couleurs comme ceci:
Que vous devez l'appeler de la sorte:
Et vous pourriez parcourir le tableau retourné très rapidement dans n'importe quelle direction que vous voulez.
line by line
Bien que les deux boucles imbriquées approche est généralement "mieux" ou plus lisible, vous pouvez le faire en 1 boucle comme ceci:
Ou un peu mieux, modifier la première ligne:
Vous pouvez essayer quelque chose comme cela
ou vous pouvez diviser cycle interne à l': de gauche à droite et de droite à gauche