Image WeightedImg; . . double color; for (int i = 0; i < dataArray.Length; i++){ color = dataArray[i, 2]; WeightedImg.Bitmap.SetPixel(x, y,Color.FromArgb((int)Math.Ceiling(color * R), (int)Math.Ceiling(color * G),(int)Math.Ceiling(color * B))); }
cette ligne:
WeightedImg.Bitmap.SetPixel(x, y,Color.FromArgb((int)Math.Ceiling(color * R), (int)Math.Ceiling(color * G),(int)Math.Ceiling(color * B)));
provoque le blocage du programme .. Je souhaite définir un pixel dans une WeightedImg
fonction d’une valeur double
.. Est-ce possible?
ou Puis-je convertir Image
en Bitmap
ou en double[,]
?
Ok, ton code fonctionne quand je l’essaie, mais il existe des alternatives.
Ce code fonctionne naturellement en fournissant la couleur * N <255 (ce qui produit une erreur différente):
Image img = new Image(10,10); double color = 5; double R = 20, B = 20, G = 20; img.Bitmap.SetPixel(0,0,Color.FromArgb((int)Math.Ceiling(color * R),(int)Math.Ceiling(color * G), (int)Math.Ceiling(color * B)));
Une autre façon de tenter la même opération consiste à atsortingbuer la valeur directement à la propriété Data si la mémoire me permet de corriger le format [hauteur, largeur, profondeur] afin que:
img.Data[y,x, 0] = (byte)Math.Ceiling(color * R); //Red img.Data[y,x, 1] = (byte)Math.Ceiling(color * G); //Green img.Data[y,x, 2] = (byte)Math.Ceiling(color * B); //Blue
Ou plus directement, vous pouvez utiliser:
img[0, 0] = new Bgr(Color.FromArgb((int)Math.Ceiling(color * R), (int)Math.Ceiling(color * G), (int)Math.Ceiling(color * B)));
Toutes ces méthodes fonctionnent et j’ai été testé.
En ce qui concerne vos autres questions, vous pouvez convertir une image en bitmap.
Bitmap x = img.ToBitmap();
Vous ne pouvez pas convertir explicitement les données en un double [,,] (et non en double [,]) sans lire tous les pixels et en prenant les données de l’image dans ce tableau, ce que je ne recommanderais pas. Les formats suivants conviennent également:
Image img = new Image(10,10); //or (filename) of course
et convertir
Image img_double = img.Convert();
mais rappelez-vous que vous ne pouvez pas convertir plus d’un élément à la fois. Un fichier ne peut pas être converti directement en fichier.
Image img_gray = img.Convert().Convert(); //or alternatively Image img_gray = img.Convert().Convert();
Si je devais deviner, sans connaître l’exception, que vous êtes Math.Ceiling, les appels renvoient une valeur inférieure à 0 ou supérieure à 255. Peut-être limiter les valeurs avant de les envoyer à Color.FromArgb dans cette plage. Vérifiez également que les valeurs x et y se trouvent bien dans l’image. Il est difficile de dire compte tenu du code ci-dessus.