Страница: 1 |
Страница: 1 |
Вопрос: Как загрузить картинку через Winsock в Picturebox?
Добавлено: 15.08.08 14:53
Автор вопроса: Petruha
Пытаюсь например загрузить с google картинку методом GET
...
webimg1 = "/logos/olympics08_badminton.gif" 'путь
Winsock1.SendData "GET " & webimg1 & " HTTP/1.0" & vbCrLf & vbCrLf
...
А процедура приема ответа не хочет работать блин
Private Sub winsock1_dataArrival(ByVal BytesTotal As Long)
Dim Data As Byte
Winsock1.GetData Data
Picture1.Picture = Data
End Sub
Текст нормально загружаю а вот картинку не получается.
Подскажите пожалуста где же я ошибся ?
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
Серёга
ICQ: 262809473
Вопросов: 17
Ответов: 561
Web-сайт:
Профиль | | #1
Добавлено: 15.08.08 16:46
Winsock1.GetData Data
Picture1.Picture = Data
Если я всё правильно понял, ты объявляешь Data как однобайтовую переменную, получаешь через винсок один байт и говоришь, что Picture1.Picture равно этому одному байту.
Так?
Вариант: загрузить картинку как текст (в String), записать на диск как *.gif (или что у тебя там...), прочитать в Picture через LoadPicture.
Номер ответа: 2
Автор ответа:
Petruha
Вопросов: 3
Ответов: 4
Профиль | | #2
Добавлено: 15.08.08 20:04
Dim sData As String
Winsock1.GetData sData, vbString, BytesTotal
'Picture1.Picture = sData
Open "C:\Shot1.gif" For Binary As #1
Put #1, , sData
Close #1
Шутники! Не работает всеравно, а на диск записывается какойто мусор. Но както же рисунок прямо в picturebox загружают.....но вот как ?
Блин нигде не могу найти пример
Номер ответа: 3
Автор ответа:
Серёга
ICQ: 262809473
Вопросов: 17
Ответов: 561
Web-сайт:
Профиль | | #3
Добавлено: 15.08.08 21:48
В каком смысле мусор? Ответ должен состоять из заголовка и файла .gif
Советую открыть мусор в блокноте и посмотреть что там.
Номер ответа: 4
Автор ответа:
Petruha
Вопросов: 3
Ответов: 4
Профиль | | #4
Добавлено: 15.08.08 22:20
Вообщем то да, Серёга прав, может кому пригодится, проблема почти решилась так:
Если запрос к GIF то ответ будет состоять из HTTP плюс GIF - т.е. надо из данных отлавливать начало
GIF89a...
Я поленился и тупо обрезал
sData = Mid(sData, 309) получаем чистый GIF
Сохраняем на диск, потом с диска загружаем picturebox
тогда в picturebox есть картинка!
Но как напрямую закинуть данные в picturebox минуя запись на диск ?
Код получился такой:
...
Dim sData As String
Winsock1.GetData sData
sData = Mid(sData, 309) 'тупо обрезаю до начала GIF
Open "C:\shot1.gif" For Binary As #1
Put #1, , sData
Close #1
Rem Picture1.Picture = sData 'Это не работает
Picture1.Picture = LoadPicture("C:\shot1.gif"
...
Если пытаться загружать JPEG то загружается мусор без заголовка. Бред какойто
Номер ответа: 5
Автор ответа:
Petruha
Вопросов: 3
Ответов: 4
Профиль | | #5
Добавлено: 15.08.08 22:29
А вот еще поправка, просто нельзя так лениво обрезать, заголовок HTTP ответа меняет свою длину и иногда можно срезать больше чем надо, но всеравно проблема остается прямой передачи картинки в picturebox минуя запись на диск.
Номер ответа: 6
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #6
Добавлено: 16.08.08 13:05
После заголовка всегда идет vbcrlf & vbcrlf. Это раз.
Где-то я видел перевод картинки из OLE Picture к стандартной виндовой с хэндлом и обратно. Вот ищи ее, а там уж можно переделать под твои нужды.
Номер ответа: 7
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #7
Добавлено: 16.08.08 13:06
Нулевые символы он тебе в строку через винсок может и не загрузить. Это я про JPEG.
Номер ответа: 8
Автор ответа:
Серёга
ICQ: 262809473
Вопросов: 17
Ответов: 561
Web-сайт:
Профиль | | #8
Добавлено: 16.08.08 19:39
Запрос то покажи. Может в нем что не так?
Я тоже где то такое видел, но там помойму нужен именно файл, а вот как нарисовать картинку, когда у тебя есть только образ файла в памяти - не знаю.
Если кто знает - делитесь.
Номер ответа: 9
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #9
Добавлено: 17.08.08 01:58
там нужно содержимое файла, а не файл)