Неверный параметр растрового изображения C # - PullRequest
0 голосов
/ 23 мая 2018

Вот что я пытаюсь сделать: взять папку, полную изображений, выполнить оптимизацию и сохранить их в одном файле.

Я получаю сообщение об ошибке:

System.ArgumentException
  Message = Parameter is not valid.

Из строки:

using (var bitmap = new Bitmap(image))

Я думаю, что это как-то связано с открытием файла и блокированием доступа, но я не уверен.Я точно знаю, что путь к файлу, который я использую, правильный, и это папка, заполненная изображениями.Кто-нибудь может мне помочь?

 string[] folder = Directory.GetFiles(GetSourceDirectory());

        Parallel.ForEach(folder, (file) =>
        {
            using (var fileStream = File.Open(file, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
            {
                var image = fileStream.Name;
                Console.WriteLine(image);
                Console.ReadLine();
                using (var bitmap = new Bitmap(image))
                {
                    using (var quantized = quantizer.QuantizeImage(bitmap, 1, 1))
                    {
                        var blob = container.GetBlockBlobReference(fileStream.Name);
                        try
                        {
                            quantized.Save(fileStream, ImageFormat.Png);
                        }
                        catch (ArgumentException e)
                        {
                            Console.WriteLine(e.Message);
                            Console.ReadLine();
                            Console.WriteLine();
                            throw;
                        }

                        blob.UploadFromStreamAsync(fileStream).Wait();

                    }
                }
            }
        });

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

FileStream.Name дает вам только имя файла, например «image.jpg», вы пробовали , используя (var bitmap = new Bitmap (fileStream)) ?

0 голосов
/ 23 мая 2018

Это потому, что вы используете поток файлов для одновременного чтения и записи.

Если вы измените File.Open на

, используя (var fileStream = File.Open (file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))

это позволит вам сделать

, используя (var bitmap = new Bitmap (image))

Нотогда, очевидно, вы открепитесь позже, когда попытаетесь писать с помощью переменной fileStream.

Так что я думаю, вам придется изменить его, чтобы у вас не было вложенных операторов использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...