Avant que quelqu'un me flamme pour ne pas vérifier les autres postes, je l'ai déjà fait. J'ai une question spécifique sur l'une des techniques qui existent pour convertir une image en niveaux de gris.
J'ai lu à travers les autres messages sur la technique 3 et essentiellement copiée 3 (ColorMatrix) du tutoriel à Ce site . Cela fonctionne très rapidement. P>
Le problème que j'ai est que ce dont j'ai besoin est une image pure BW. (I.e.: Si la moyenne (R, B, G)> 200 => Blanc Autre Black). Je l'ai mis en œuvre la voie directe et cela prend presque 10 fois 10 fois l'algorithme de niveaux de gris du tutoriel. P>
Je ne suis pas expert avec le traitement de l'image et je me demandais s'il y avait un moyen de modifier le Snippet du tutoriel pour convertir des images en noir et blanc pur. Sinon, une manière efficace ferait. P>
EDIT: P>
Voici le code que j'utilise pour le noir et blanc (pas d'approche cerveau): P>
public Bitmap make_bw(Bitmap original) { Bitmap output = new Bitmap(original.Width, original.Height); for (int i = 0; i < original.Width; i++) { for (int j = 0; j < original.Height; j++) { Color c = original.GetPixel(i, j); int average = ((c.R + c.B + c.G) / 3); if (average < 200) output.SetPixel(i, j, Color.Black); else output.SetPixel(i, j, Color.White); } } return output; }
3 Réponses :
Lire ceci, même problème: Qu'est-ce qui serait Une bonne vraie coloratrice noire et blanche? P>
Aurait dû rechercher plus attentivement ... problème résolu, fonctionne vraiment vite.
J'ai "triché" un peu ... a vu que l'exemple à jeun dans votre lien utilisé SetColormatrix et Googled pour SetColorMatrix BW :-)
Ce gars fait trois tests, le plus rapide étant le Mais l'un des commentateurs affirme que la raison de la méthode directe et J'ai testé cela et il semble que la méthode dangereuse soit d'environ 2,5 fois plus rapide que d'utiliser le colormertrix code> comme mentionné ici. Lien externe sur la conversion d'image p>
dangereux code> pixel est plus lente est des appels à
.Width code> et
.Height code>. Dans les bitmaps et la copie de ces valeurs aux variables locales rend l'accès direct de pixels sensiblement plus rapidement. p>
colormertrix code>. Mais il est sans doute plus impliqué et il est évident que cela nécessite que le code
dangereux code> soit autorisé dans le projet qui pourrait ne pas être souhaitable. p>
S'il vous plaît, n'incluez pas simplement des liens vers des articles externes sans ajouter d'exemples ici. Maintenant, le lien est mort et il n'y a aucun moyen de savoir comment mettre en œuvre cela.
J'utilise ce code simple:
public Bitmap GrayScaleFilter(Bitmap image) { Bitmap grayScale = new Bitmap(image.Width, image.Height); for (Int32 y = 0; y < grayScale.Height; y++) for (Int32 x = 0; x < grayScale.Width; x++) { Color c = image.GetPixel(x, y); Int32 gs = (Int32)(c.R * 0.3 + c.G * 0.59 + c.B * 0.11); grayScale.SetPixel(x, y, Color.FromArgb(gs, gs, gs)); } return grayScale; }
Je pensais parler du moyen le plus rapide de faire ça?
Vous n'avez pas vraiment besoin d'une matrice de couleur pour convertir en une image 1 bit (pure noir et blanc). Essayez la deuxième solution et voyez si cela est plus rapide. (Sinon, veuillez publier votre code.)
Cal vous collez du code qui fonctionne mal? Comment quelque chose peut-il ajouter 10 fois plus de temps si vous n'ajoutez qu'un 'si' à celui-ci?