C# Nadpisanie obrazu błąd

0

Witam,
Napisałem program który zamienia pixel o danym kolorze na inny i chce nadpisać go jednak w momencie wywołania komendy Image.Save program mi się wywala z komunikatem "W interfejsie GDI+ wystąpił błąd rodzajowy.”

Kod:

        static void Main(string[] args)
        {
            string appPath = Directory.GetCurrentDirectory();
            string[] files = Directory.GetFiles(appPath, "*.png");

            int i = 0;
            Console.WriteLine("Start...");

            foreach (var item in files)
            {
                Bitmap myBitmap = new Bitmap(item);

                for (int Xcount = 0; Xcount < myBitmap.Width; Xcount++)
                {
                    for (int Ycount = 0; Ycount < myBitmap.Height; Ycount++)
                    {     
                        Color pixelColor = myBitmap.GetPixel(Xcount, Ycount);
                        if (pixelColor == Color.FromArgb(255, Color.Red)) myBitmap.SetPixel(Xcount, Ycount, Color.FromArgb(74, 65, 33));
                    }
                }

                string[] words = item.ToString().Split('\\');
                string fileName = words[words.Length - 1];

                myBitmap.Save(appPath + @"\" + fileName, ImageFormat.Png);

                Console.WriteLine("Successful");
                i++;
            }
        }
0

Problem polega na tym ,że cały czas twój program ma otwarty plik ,który chce zapisać.

0

No okej a jak zrobić żeby nadpisało mi bez wyrzucania błędu?

1
           string appPath = Directory.GetCurrentDirectory();
            string[] files = Directory.GetFiles(appPath, "*.png");
            Bitmap temporaryImage;
            int i = 0;
            Console.WriteLine("Start...");

            foreach (var item in files)
            {
                using (Bitmap myBitmap = new Bitmap(item))
                {
                    temporaryImage = new Bitmap(myBitmap);
                };

                for (int Xcount = 0; Xcount < temporaryImage.Width; Xcount++)
                {
                    for (int Ycount = 0; Ycount < temporaryImage.Height; Ycount++)
                    {
                        Color pixelColor = temporaryImage.GetPixel(Xcount, Ycount);
                        if (pixelColor == Color.FromArgb(255, Color.Red))   temporaryImage.SetPixel(Xcount, Ycount, Color.FromArgb(74, 65, 33));
                    }
                }


                temporaryImage.Save(item, ImageFormat.Png);


                Console.WriteLine("Successful");
                i++;
              }

Wystarczy sobie skopiować bitmapę.
Nie wiem też po co na nowo konstruujesz już wcześnie skonstruowaną ścieżkę. To też poprawiłem jeśli było to celowe to sobie zmień.

0

Działa, dziękuję za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1