Страница: 1 |
Страница: 1 |
Вопрос: Из STRING в Picture
Добавлено: 22.09.06 19:34
Автор вопроса: Arvitaly | Web-сайт:
Извините, никто не подскажет как средствами VB6 или WinApi 32 перевести формат string или byte в картинку??
Т.е. в переменной типа стринг хранится побайтовый текст файла картинки, нужно не создавая на жестком диске файла засунуть в пикчурбокс или в любой элемент управления изображениями этот текст только в виде исходной картинки.
Заранее, спасибо.
<a href="mailto:arvitaly@mail.ru">
Ответы
Всего ответов: 5
Номер ответа: 1
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #1
Добавлено: 22.09.06 22:35
Если битмап, то пожалуйста. Извлеки из строки заголовок и растр, а затем передай их в SetDiBits или в SetDIBitsToDevice.
Если же используется массив байт - это лучше по следующим причинам:
-можно передавать апишкам указатель прямо на позиции байтового массива, избавившись от лишнего копирования
-нет проблем с хранением - я вот лично до сих пор не могу толком врубиться, как VB хранит строки. Вроде в юникоде.
А вот как быть с другими форматами - не знаю.
Номер ответа: 2
Автор ответа:
Arvitaly
ICQ: 301746136
Вопросов: 28
Ответов: 549
Web-сайт:
Профиль | | #2
Добавлено: 24.09.06 13:17
Проблема в том что формат GIF, а VB хранит строки в Юникоде
Номер ответа: 3
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #3
Добавлено: 24.09.06 15:17
' Проект : OfflineClient
' Процедура : PictureFromMemory
' Описание : Получение IPicture из массива
' Кем создан : SNE
' Дата-Время : 15.11.2004-21:45:57
'
' Параметры : btData() - Данные картинки
'--------------------------------------------------------------------------------
Public Function PictureFromMemory(ByRef btData() As Byte) As IPicture
Dim IID_IPicture(15) As Byte
Dim pGlobal As Long, pStream As IUnknown
Const sIID_IPicture = "{7BF80980-BF32-101A-8BBB-00AA00300CAB}"
pGlobal = GlobalAlloc(0&, UBound(btData) + vbNull)
Call CopyMemory(ByVal pGlobal, btData(0), UBound(btData) + vbNull)
If CreateStreamOnHGlobal(pGlobal, True, pStream) = 0& Then
If CLSIDFromString(StrPtr(sIID_IPicture), IID_IPicture(0)) = 0& Then
Call OleLoadPicture(ByVal ObjPtr(pStream), UBound(btData) + vbNull, False, IID_IPicture(0), PictureFromMemory)
End If
End If
If PictureFromMemory Is Nothing Then _
Call GlobalFree(pGlobal)
End Function
Номер ответа: 4
Автор ответа:
Arvitaly
ICQ: 301746136
Вопросов: 28
Ответов: 549
Web-сайт:
Профиль | | #4
Добавлено: 24.09.06 15:48
А можно пример вызова функции
Номер ответа: 5
Автор ответа:
Arvitaly
ICQ: 301746136
Вопросов: 28
Ответов: 549
Web-сайт:
Профиль | | #5
Добавлено: 24.09.06 16:14
Все разобрался огромное спасибо