Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Графику и текст в один файл Добавлено: 14.03.05 18:33  

Автор вопроса:  ivan_81 | ICQ: 346805121 
Собственно сабж.
Имеется класс содержащий графику (изображения формата BMP, JPG или GIF) и текстовую информацию (несколько полей неопределённого заранее размера). Нобходимо сохранить данные и этого класса на диск, желательно в один файл (с последующей возможностью чтения :-)). Интересует как побитово записать изображение в файл в определённом месте файла, а затем считать и засунуть например в image.
Может кто ссылочку на инфу бросит, или соббственным опытом поделится.
Заранее благодарен.

Ответить

  Ответы Всего ответов: 5  

Номер ответа: 1
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #1
Добавлено: 14.03.05 21:10
Перед сохранением рассчитай все и первые 10-20 байт используй как заголовок...

При чтении - прочитай заголовок, а уже потом по полученным смещениям - разбирай файл...

Ответить

Номер ответа: 2
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #4
Добавлено: 14.03.05 23:17
Держи секретную функцию и некому не показывай гы :)))

Private Declare Function GlobalAlloc Lib "kernel32" (ByVal uFlags As Long, ByVal dwBytes As
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-сайт: hw.t-k.ru
 Профиль | | #5
Добавлено: 14.03.05 23:22
В общем-то если поисследовать, то мона и наобоот из Picture в данные перегнать... Раз есть метод SavePicture, значит если очень захотеть данные можно получить и без сохранения их на диск... Еслит же хочется но не очень, то можешь в tmp файл сохранять...

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам