Изображение не конвертируется в Bitmap - PullRequest
1 голос
/ 28 мая 2020

В настоящее время у меня возникает проблема, когда изображение не может быть преобразовано в Bitmap.

Это код, о котором идет речь:

private void btnPicture_Click(object sender, EventArgs e)
        {
            OpenFileDialog opFile = new OpenFileDialog();
            opFile.Title = "Choose a picture!";
            opFile.Filter = "jpg files (*.jpg)|*.jpg|All files (*.*)|*.*";

            string appPath = Path.GetDirectoryName(Application.ExecutablePath);
            if (Directory.Exists(appPath) == false)
            {
                Directory.CreateDirectory(appPath);
            }

            if (opFile.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    Character.imageName = opFile.SafeFileName;
                    Stream stream = opFile.OpenFile(); //<------ This is the line in question
                    Bitmap toResize = new Bitmap(stream);

                    Image characterImage = ResizeImage(toResize, 200, 306);

                    imgCharacter.Image = characterImage;
                    characterImage.Save("Images/" + Character.imageName);
                }
                catch (Exception exp)
                {
                    MessageBox.Show("Please select a picture, exception code: " + exp.Message);
                }
            }
            else
            {
                opFile.Dispose();
            }
        }

Теперь в основном этот код работает с каждым изображением, которое Я пробовал, за исключением 1. Единственное изображение, которое мои друзья пытались загрузить, будет выглядеть sh со следующей ошибкой: Параметр недействителен.

То, что я пробовал:

  • Сначала друг прислал мне рассматриваемое изображение. Я загрузил его и столкнулся с той же проблемой.
  • Затем я попросил друга прислать мне другие изображения, которые работали на его машине, они все еще работали.
  • Затем я открыл это изображение в Paint , "сохранил как" картинку в любую папку, потом все заработало. В процессе я получил предупреждение о том, что сохранение изображения таким образом может привести к потере прозрачности.
  • Чтобы проверить, была ли проблема с прозрачностью, я загрузил "прозрачное" изображение с экрана rnet, чтобы проверить, не вот в чем проблема - изображение загрузится правильно.
  • Наконец, я искал точно такое же изображение на inte rnet и пытался загрузить его точно так же, как это сделал мой друг, я не получил ошибка.
  • Чтобы убедиться, что изображение не повреждено, я попросил друга загрузить его еще раз и отправить мне - ошибка все равно возникнет.
  • Я запустил отладчик построчно чтобы точно определить строку кода, в которой происходит сбой. Понятия не имею, в чем может быть причина.

Ссылка на изображение: https://cdn.discordapp.com/attachments/413040202307731466/713873776143499294/babar1.jpg

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

Хорошего дня.

1 Ответ

2 голосов
/ 28 мая 2020

Я посмотрел на предоставленное вами изображение с именем «barbar1.jpg» в шестнадцатеричном редакторе и увидел маркеры RIFF WEBPVP8 в начале. Это означает, что изображение не является файлом JPG, а является файлом WEBP.

https://en.wikipedia.org/wiki/WebP

Ошибка, которую вы получаете, возникает при инициализации нового растрового изображения из потока . Класс Bitmap поддерживает только BMP, GIF, EXIF, JPG, PNG и TIFF.

Microsoft Paint поддерживает WEBP, поэтому вы можете открыть его и просмотреть. Microsoft и другие программы просмотра изображений игнорируют расширение файла и анализируют изображение на основе формата самих данных файла. Вот почему вы можете переименовать файл в PNG, JPG, BMP и т. Д. c, и Paint по-прежнему сможет его прочитать.

...