Страница: 1 |
Страница: 1 |
Вопрос: Графику и текст в один файл
Добавлено: 14.03.05 18:33
Автор вопроса: ivan_81 | ICQ: 346805121
Собственно сабж.
Имеется класс содержащий графику (изображения формата BMP, JPG или GIF) и текстовую информацию (несколько полей неопределённого заранее размера). Нобходимо сохранить данные и этого класса на диск, желательно в один файл (с последующей возможностью чтения :-)). Интересует как побитово записать изображение в файл в определённом месте файла, а затем считать и засунуть например в image.
Может кто ссылочку на инфу бросит, или соббственным опытом поделится.
Заранее благодарен.
Ответы
Всего ответов: 5
Номер ответа: 1
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #1
Добавлено: 14.03.05 21:10
Перед сохранением рассчитай все и первые 10-20 байт используй как заголовок...
При чтении - прочитай заголовок, а уже потом по полученным смещениям - разбирай файл...
Номер ответа: 2
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #2
Добавлено: 14.03.05 21:12
Побитово как незнаю, но побайтово - можешь всю информацию сгрузить в строку и...
dim nf as integer
nf = freefile
open lpFileName for binary access write as nf
put 1, 1, strData
close nf
Вобщем-то второй параметр у Put - это есть смещение от начала файла...
Номер ответа: 3
Автор ответа:
ivan_81
ICQ: 346805121
Вопросов: 10
Ответов: 11
Профиль | | #3
Добавлено: 14.03.05 23:05
отлично. с записью-чтением разобрались, а как затем из строки в image забросить изображение, или всётаки через api выводить?
Кстати была идея в строку всё забросить, но как из многострадальго image картинку побайтово прочитать ума не прилажу
Номер ответа: 4
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #4
Добавлено: 14.03.05 23:17
Держи секретную функцию и некому не показывай гы ))
Long) As Long
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
Private Declare Function CreateStreamOnHGlobal Lib "ole32" (ByVal hGlobal As Long, ByVal fDeleteOnRelease As Long, ppstm As Any) As Long
Private Declare Function CLSIDFromString Lib "ole32" (ByVal lpsz As Any, ByRef pclsid As Byte) As Long
Private Declare Function OleLoadPicture Lib "olepro32" (pStream As Any, ByVal lSize As Long, ByVal fRunmode As Long, ByRef riid As Byte, ppvObj As Any) As Long
Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long
'--------------------------------------------------------------------------------
' Проект : 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
Номер ответа: 5
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #5
Добавлено: 14.03.05 23:22
В общем-то если поисследовать, то мона и наобоот из Picture в данные перегнать... Раз есть метод SavePicture, значит если очень захотеть данные можно получить и без сохранения их на диск... Еслит же хочется но не очень, то можешь в tmp файл сохранять...