Страница: 1 |
Страница: 1 |
Вопрос: тип данных IPictureDisp
Добавлено: 22.05.06 20:49
Автор вопроса: Nj | ICQ: 223663115
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
Yeputons
ICQ: 278444762
Вопросов: 71
Ответов: 179
Профиль | | #1
Добавлено: 22.05.06 21:08
"Куча цифр" - это уникальный идентефикатор картинки, который возвращаеют через регистр EAX WINDOWS API-функции CreateImage, CreateCursor, CreateIcon. Т.е. это возвращаемое этими функциями значение. Потом в функции CreateWindowEx задаётся именно эта "куча цифр". ВСЕ ДРУЖНО ИЗУЧАЕМ АССЕМБЛЕР И WINDOWS API!!!
Номер ответа: 2
Автор ответа:
Nj
ICQ: 223663115
Вопросов: 21
Ответов: 285
Профиль | | #2
Добавлено: 22.05.06 21:57
Спасибо... Так, следовательно сам битмап хранится в чем? EAX WINDOWS? Как просто получить картинку из памяти в виде байтового массива или чего подобного?
Номер ответа: 3
Автор ответа:
Yeputons
ICQ: 278444762
Вопросов: 71
Ответов: 179
Профиль | | #3
Добавлено: 23.05.06 16:26
Во-первых, возволь исправить тебя насчет "EAX WINDOWS". EAX - это название регистра. А WINDOWS относится к WINDOWS API. И вообще это ассемблер.
Как получить картинку из памяти я не знаю. Знаю только один метод:
1)Создаешь на форме PictureBox, размером с твою картинку.
2)Делаешь ему BorderStyle=NONE, Visible=False.
3)Даешь ему имя, например ByteArray
4)Загружаешь в него картинку командой ByteArray.Picture = LoadImage(...)
5)Затем считываешь командами ByteArray.Point(X, Y)
Номер ответа: 4
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #4
Добавлено: 23.05.06 17:12
' Проект : OfflineClient
' Процедура : PictureFromMemory
' Описание : Получение IPicture из массива
' Кем создан : SNE
' Дата-Время : 15.11.2004-21:45:57
'
' Параметры : btData() - Данные картинки
'--------------------------------------------------------------------------------
Public Function PictureFromMemory(ByRef btData() As Byte) As IPicture
Dim IID_IPicture(16) 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
'--------------------------------------------------------------------------------
' Проект : OfflineClient
' Процедура : PictureFromBitmap
' Описание : Перевод Bitmap в Picture
' Кем создан : SNE
' Дата-Время : 20.11.2004-0:30:20
'
' Параметры : hBmp - Хэндл
'--------------------------------------------------------------------------------
Public Function PictureFromBitmap(ByVal hBmp As Long) As IPicture
Dim IID_IPicture(16) As Byte
Dim oNewPic As IPicture, tPicConv As PictDesc
With tPicConv
.cbSizeofStruct = Len(tPicConv)
.picType = vbPicTypeBitmap
.hImage = hBmp
End With
Call CopyMemory(IID_IPicture(0), &H20400, 4&
Call CopyMemory(IID_IPicture(8), &HC0, 1&
Call CopyMemory(IID_IPicture(15), &H46, 1&
Call OleCreatePictureIndirect(tPicConv, IID_IPicture(0), True, oNewPic)
Set PictureFromBitmap = oNewPic
End Function
Номер ответа: 5
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #5
Добавлено: 23.05.06 17:16
ой, баянчик ) прастите, я потом вчитался в коменты ))
Номер ответа: 6
Автор ответа:
Nj
ICQ: 223663115
Вопросов: 21
Ответов: 285
Профиль | | #6
Добавлено: 24.05.06 20:03
Спасибо, буду юзать - проблема то в том, что картинка - айкон и нужно вынуть из загруженного айкона нужный размер... Поэтому все пикчербокс-методы мне не помогут ...
ну эту тему мы уже ковыряли раннее...
2 HACKER - отдельно сэнкс, буду разгребаться.