dnibbo Ответов: 2

Поле изображения не отображает изображение VB.NET


Всем Привет

Надеюсь, кто-нибудь сможет помочь...
Я храню изображения в базе данных SQL с помощью столбца VARBINARY.
Он хранится нормально, и я могу его извлечь, но, похоже, не могу заставить его отображаться в элементе управления PictureBox.
Когда я устанавливаю изображение picturebox, оно, кажется, устанавливается нормально, и я действительно могу сохранить изображение picture box в файл без проблем, но оно не будет отображаться.
Конечно, это что-то очевидное, но я ни за что на свете не могу понять, что не так с кодом:.

Dim bImage As Byte() = DirectCast(oCmd.ExecuteScalar(), Byte())
If bImage Is Nothing Then
    Return
End If

Dim ms As New IO.MemoryStream
ms.Write(bImage, 0, bImage.Length)
Dim bitmap As New Bitmap(ms)
pictureBox1.Image = bitmap

Dim sf As New SaveFileDialog
If sf.ShowDialog() = DialogResult.OK Then
    MsgBox(sf.FileName)
    pictureBox1.Image.Save(sf.FileName, Imaging.ImageFormat.Jpeg)
End If


Как уже было сказано, SQL возвращает данные, которые затем преобразуются в растровое изображение.
При осмотре объектов все выглядит нормально, то есть формат, высота, ширина и т. д...
Изображение pictureBox1.Image.Сохранение работает отлично, и исходное изображение можно просматривать из проводника файлов просто отлично.

Итак... почему pictureBox1 не показывает мое изображение?


Спасибо

Что я уже пробовал:

Тщательно проверил свой код, убедился, что все в порядке, погуглил все, что смог придумать.
Перепробовал все возможные методы загрузки изображения: FromStream / FromFile и т. д...

2 Ответов

Рейтинг:
9

dnibbo

Хорошо, вот что произошло и как диагностировать такие ошибки на случай, если кто-то найдет это во время поиска.

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

Если это ошибка, то используйте событие picturebox.LoadComplete.
Взгляните на e.Error и вуаля причина ошибки изображения будет выявлена.
Было бы лучше, если бы контроль бросил исключение, по моему скромному мнению, но это то, что есть...

Надеюсь, это кому-то поможет.

Кстати, чтобы вы все могли смеяться надо мной, причина, по которой мой провал был вызван недопустимым значением в свойстве image location. Я думал, что это означает, где (местоположение) в поле изображения я хочу, чтобы изображение было визуализировано, поэтому я установил его в центр LOL. Он не жаловался во время разработки, но во время выполнения он действительно искал расположение файла под названием c:/projectfolder/centre чтобы загрузить изображение из. опаньки.

Спасибо за ответы.


Рейтинг:
1

Jochen Arndt

Вы показываете диалоговое окно выбора файла сразу после назначения растрового изображения, которое блокирует рисование нового содержимого элемента управления picture box.

Если с растровым изображением не было ошибки, то новое изображение должно быть показано после закрытия диалогового окна выбора файла и возврата функции, в которой вы установили изображение.

Чтобы показать изображение перед открытием диалогового окна файла, вы можете принудительно перерисовать его:

pictureBox1.Image = bitmap
pictureBox1.Refresh


dnibbo

Привет Йохен

Спасибо за ответ.

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

Спасибо

Jochen Arndt

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

dnibbo

Спасибо, picturebox-это единственный элемент управления в диалоговом окне, и он установлен на весь экран.
Я действительно задавался вопросом, был ли он нулевого размера или что-то в этом роде, поэтому осмотрел объекты, и все хорошо.
Что я обнаружил, так это то, что поле с картинками на самом деле показывает изображение ошибки.
Трудно сказать, так как ErrorImage по умолчанию совпадает с InitialImage по умолчанию.
Я изменил изображение ошибки, и это то, что отображается сейчас.
Итак, как мне диагностировать, почему используется образ ошибки? Код находится в режиме try/catch, но никаких исключений не отображается.
Так что я думаю, что вопрос немного изменился... что делает дисплей управления PictureBox в errorImage вместо изображения.

Спасибо снова

Jochen Arndt

Ваш образ, вероятно, недействителен. При загрузке из потока памяти это должно быть допустимое растровое изображение (а не другой формат изображения, такой как GIF, PNG, JPEG и даже не растровый файл, который имеет дополнительные заголовочные байты перед растровыми данными).