2014-10-18 5 views
2

Вопрос here прекрасно объясняет, как преобразовать изображение в виде изображения в массив байтов в VB6. Я хочу сделать обратное и загрузить изображение с изображения из байтового массива.Загрузка изображения из байтового массива в VB6

Я нашел частичное решение here, которое использует следующий код

Public Function ArrayToPicture(inArray() As Byte, Offset As Long, Size As Long) As IPicture 

    ' function creates a stdPicture from the passed array 
    ' Offset is first item in array: 0 for 0 bound arrays 
    ' Size is how many bytes comprise the image 
    Dim o_hMem As Long 
    Dim o_lpMem As Long 
    Dim aGUID(0 To 3) As Long 
    Dim IIStream As IUnknown 

    aGUID(0) = &H7BF80980 ' GUID for stdPicture 
    aGUID(1) = &H101ABF32 
    aGUID(2) = &HAA00BB8B 
    aGUID(3) = &HAB0C3000 

    o_hMem = GlobalAlloc(&H2&, Size) 
    If Not o_hMem = 0& Then 
     o_lpMem = GlobalLock(o_hMem) 
     If Not o_lpMem = 0& Then 
      CopyMemory ByVal o_lpMem, inArray(Offset), Size 
      Call GlobalUnlock(o_hMem) 
      If CreateStreamOnHGlobal(o_hMem, 1&, IIStream) = 0& Then 
        Call OleLoadPicture(ByVal ObjPtr(IIStream), 0&, 0&, aGUID(0), ArrayToPicture) 
      End If 
     End If 
    End If 
End Function 

Как получить смещение и размер, чтобы перейти к этой функции?

+1

Попробуйте 0 и ubound (yourarray), чтобы рассказать об этом массиве целиком –

+0

Я использовал Offset = LBound (Bytear()) и size = UBound (Bytear()) - LBound (Bytear()) +1 Кажется, чтобы работать, мне интересно, почему образец не просто делает это? Позаботьтесь, чтобы написать свой ответ? –

ответ

1

Аргумент Size - это общее количество байтов, содержащих изображение в массиве, Offset - это индекс массива, в котором начинается информация, что позволяет одному массиву хранить несколько изображений.

Если массив содержит единственное изображение, перейдите его LBound для Offset и UBound - LBound + 1 для Size.

Смежные вопросы