La conversion d'un tableau de Pixels d'une image en C#
J'ai un tableau de int
pixels dans mon programme C# et je veux le convertir en une image. Le problème est que je suis la conversion Java code source d'un programme équivalent en code C#. En java la ligne lit qui affiche le tableau de int de pixels dans l'image:
Image output = createImage(new MemoryImageSource(width, height, orig, 0, width));
quelqu'un peut me dire le C# équivalent?
Ici orig est la matrice de int
pixels. J'ai cherché la classe Bitmap et il y a une méthode appelée SetPixel
mais le problème est que cela prend une coordonnée x,y nombre. Mais ce que j'ai dans mon code est un tableau de int
pixels. Une autre chose étrange est mon orig tableau a nombre négatif et qu'ils sont bien loin de 255. En Java, c'est le même cas (ce qui signifie à la fois le tableau en C# et Java ont une valeur équivalente) et les valeurs fonctionne bien en Java.
Mais je ne peux pas obtenir cette ligne traduit en C#. S'il vous plaît aider.
OriginalL'auteur | 2008-12-24
Vous devez vous connecter pour publier un commentaire.
L'utilisation de WPF, vous pouvez créer une image bitmap (image) directement à partir de votre tableau. Vous pouvez ensuite encoder cette image ou de l'afficher ou de jouer avec elle:
D'où viennent les 7 et 8 viennent en
(width * pf.BitsPerPixel + 7) / 8
?OriginalL'auteur Frank Krueger
Vous pouvez utiliser Bitmap.LockBits pour obtenir les données de l'image que vous pouvez manipuler directement, plutôt que par le biais de SetPixel. (Comment utiliser LockBits)
OriginalL'auteur mackenir
J'aime le WPF option déjà présenté, mais ici c'est à l'aide de
LockBits
etBitmap
:Avec (comme données de test):
OriginalL'auteur Marc Gravell
Bien, je suis en supposant que chaque int est le composite ARGB de la valeur? Si il n'y a pas une option facile, alors LockBits pourrait être intéressant de regarder at - il va être beaucoup plus rapide que
SetPixel
, mais est plus complexe. Vous devrez également vous assurer que vous savez comment l'int est composé (ARGB? RGBA?). Je vais essayer de voir si il y a un plus évident option...OriginalL'auteur Marc Gravell
MemoryImageSource's du constructeur 3ème argument est un tableau d'entiers composé de argb valeurs dans cet ordre
L'exemple de la page crée un tableau;
Vous avez besoin de se décomposer, tableau d'entiers dans un tableau d'octets (opérateur de décalage serait utile), mais il devrait être dans bgr ordre, pour LockBits méthode de travail.
OriginalL'auteur tafa
Je vous conseille d'utiliser LockBits mais un ralentissement de la fonction SetPixel algorithme pourrait ressembler à quelque chose comme
OriginalL'auteur user21826