Показать изображение в PictureBox, используя URL-адрес из базы данных Access

У меня есть база данных Access, содержащая карты для карточной игры с их изображением. Один из столбцов в моей базе данных содержит URL изображений этих карточек.
Однако я изо всех сил пытаюсь показать изображение из URL-адреса в PictureBox.

Я попытался загрузить его с помощью класса HttpClient, но получил слишком много ошибок, поэтому вот код, в котором ошибок нет, но он все равно не работает:

' adds an image to a PictureBox
PictureBox1.Image = Image.FromFile(dataSet.Tables("YGO cards").Rows(0).Item(8)) 

Это вызывает ошибку:

Object reference not set to an instance of an object.

Знаете ли вы способ отображения изображений с использованием URL-адреса?
Существуют тысячи карточек с разными URL-адресами.

Вот два из них:
https://storage.googleapis.com/ygoprodeck.com/pics/27551.jpg
https://storage.googleapis.com/ygoprodeck.com/pics/41777.jpg

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
872
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать метод Вебклиент. DownloadFileTaskAsync для загрузки файлов растровых изображений (если вам нужно сохранить их и, в конечном итоге, загрузить только обновления растровых изображений), а затем загрузить изображение из файла:
(чтобы использовать этот асинхронный метод, ваш код должен содержаться в async обработчике метода/события)

Dim imageURL As String = "https://storage.googleapis.com/ygoprodeck.com/pics/27551.jpg"
Dim imageURI As Uri = New Uri(imageURL)
Dim bitmapFile As String = Path.Combine(Application.StartupPath, $"images\{imageURI.Segments.Last()}")

Using client As WebClient = New WebClient()
    Await client.DownloadFileTaskAsync(imageURI, bitmapFile)
    PictureBox1.Image?.Dispose()
    PictureBox1.Load(bitmapFile)
End Using

Я предлагаю зарегистрировать имя файла растрового изображения в базе данных; только имя файла, а не полный путь: расположение изображений должно быть определено, когда приложение загружает изображения в первый раз, и может измениться (или пользователь может изменить его по какой-либо причине). Если вам нужно переместить изображения, вам просто нужно обновить путь к хранилищу.
Эта информация также может храниться в базе данных.

Добавьте логическое поле [Downloaded], чтобы установить его в True, когда изображение будет загружено (чтобы отфильтровать записи, у которых еще нет связанного растрового изображения).


Если вы не хотите или не можете загружать растровые изображения, вы можете использовать метод PictureBox.LoadAsync (или синхронный метод PictureBox.Load), чтобы позволить элементу управления выполнить эту работу за вас:

Dim imageURL As String  = "https://storage.googleapis.com/ygoprodeck.com/pics/27551.jpg"
PictureBox1.Image?.Dispose()    
PictureBox1.LoadAsync(imageURL)

Или используйте метод WebClient.DownloadDataTaskAsync() для загрузки данных изображения в виде массива байтов и создания нового растрового изображения из MemoryStream. Bitmap не будет сохранен на диске:

Dim imageURL As String = "https://storage.googleapis.com/ygoprodeck.com/pics/27551.jpg"
Dim client As WebClient = New WebClient()
Dim ms As MemoryStream = New MemoryStream(
    Await client.DownloadDataTaskAsync(New Uri(imageURL))
)

Using image As Image = Image.FromStream(ms)
    PictureBox1.Image?.Dispose()
    PictureBox1.Image = DirectCast(image.Clone(), Image)
End Using

ms.Dispose()
client.Dispose()

Ну, я рад, что это было полезно :)

Jimi 06.04.2019 04:32

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

Mary 06.04.2019 04:33

Другие вопросы по теме