Je souhaite modifier les pixels d'une image entre 140 et 180. J'ai donc utilisé le code suivant. Mais il ne sauvegarde que l'image originale, pas celle qui a été changée. Aidez-moi à convertir les pixels de l'image entre 140 et 180 en 0 (couleur noire). Ci-dessous mon code:Modification d'une plage particulière de valeurs de pixel à la valeur requise dans C#
public void convertImage(string imag)//some file path
{
using (Bitmap image = new System.Drawing.Bitmap(imag))
{
BitmapData data = image.LockBits(new Rectangle(0, 0, image.Width, image.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
IntPtr ptr = data.Scan0;
int size = data.Stride * image.Height;
byte[] bytes = new byte[size];
Marshal.Copy(ptr, bytes, 0, bytes.Length);
for (int y = 0; y < image.Height; y++)
{
for (int x = 0; x < image.Width; x++)
{
if (
(140 < bytes[(y * data.Stride) + (x * 3) + 2]) && (180 > bytes[(y * data.Stride) + (x * 3) + 2]) &&
(140 < bytes[(y * data.Stride) + (x * 3) + 1]) && (180 > bytes[(y * data.Stride) + (x * 3) + 1]) &&
(140 < bytes[(y * data.Stride) + x * 3]) && (180 > bytes[(y * data.Stride) + x * 3])
)
{
bytes[(y * data.Stride) + (x * 3) + 2] = (int)0;
bytes[(y * data.Stride) + (x * 3) + 1] = (int)0;
bytes[(y * data.Stride) + x * 3] = (int)0;
}
}
}
Marshal.Copy(bytes, 0, ptr, bytes.Length);
image.UnlockBits(data);
image.Save("sys.bmp", ImageFormat.Bmp);
image.Dispose();
}
}
Ici je suppose mon image est d'avoir des pixels de gris entre 140 à 180 de chaque couleur. Aidez-moi, s'il vous plaît.
Avez-vous traversé cela dans le débogueur? Savez-vous que vous entrez dans le bloc 'if'? – adv12
Lorsque vous avez terminé, quelle image recherchez-vous pour les changements? L'image originale ou 'sys.bmp'? – adv12
Invoque UnlockBits juste après votre premier Marshal.Copy. Et en plus, pas besoin de disposer votre image, l'utilisation de la déclaration est là pour cela. –