mPictToArray.bas
上传用户:davilee3
上传日期:2015-04-22
资源大小:986k
文件大小:3k
源码类别:

浏览器

开发平台:

Visual Basic

  1. Attribute VB_Name = "mPictToArray"
  2. Option Explicit
  3. '---------------------------------------------------------------------------------------
  4. ' Procedure : SaveImage
  5. ' Purpose   : Saves a StdPicture object in a byte array.
  6. '---------------------------------------------------------------------------------------
  7. '
  8. Public Function SaveImage( _
  9.    ByVal image As StdPicture) As Byte()
  10. Dim abData() As Byte
  11. Dim oPersist As IPersistStream
  12. Dim oStream As IStream
  13. Dim lSize As Long
  14. Dim tStat As STATSTG
  15.    ' Get the image IPersistStream interface
  16.    Set oPersist = image
  17.    
  18.    ' Create a stream on global memory
  19.    Set oStream = CreateStreamOnHGlobal(0, True)
  20.    
  21.    ' Save the picture in the stream
  22.    oPersist.Save oStream, True
  23.       
  24.    ' Get the stream info
  25.    oStream.Stat tStat, STATFLAG_NONAME
  26.       
  27.    ' Get the stream size
  28.    lSize = tStat.cbSize * 10000
  29.    
  30.    ' Initialize the array
  31.    ReDim abData(0 To lSize - 1)
  32.    
  33.    ' Move the stream position to
  34.    ' the start of the stream
  35.    oStream.Seek 0, STREAM_SEEK_SET
  36.    
  37.    ' Read all the stream in the array
  38.    oStream.Read abData(0), lSize
  39.    
  40.    ' Return the array
  41.    SaveImage = abData
  42.    
  43.    ' Release the stream object
  44.    Set oStream = Nothing
  45. End Function
  46. '---------------------------------------------------------------------------------------
  47. ' Procedure : LoadImage
  48. ' Purpose   : Creates a StdPicture object from a byte array.
  49. '---------------------------------------------------------------------------------------
  50. '
  51. Public Function LoadImage( _
  52.    ImageBytes() As Byte) As StdPicture
  53. Dim oPersist As IPersistStream
  54. Dim oStream As IStream
  55. Dim lSize As Long
  56.   
  57.    ' Calculate the array size
  58.    lSize = UBound(ImageBytes) - LBound(ImageBytes) + 1
  59.    
  60.    ' Create a stream object
  61.    ' in global memory
  62.    Set oStream = CreateStreamOnHGlobal(0, True)
  63.    
  64.    ' Write the header to the stream
  65.    oStream.Write &H746C&, 4&
  66.    
  67.    ' Write the array size
  68.    oStream.Write lSize, 4&
  69.    
  70.    ' Write the image data
  71.    oStream.Write ImageBytes(LBound(ImageBytes)), lSize
  72.    
  73.    ' Move the stream position to
  74.    ' the start of the stream
  75.    oStream.Seek 0, STREAM_SEEK_SET
  76.       
  77.    ' Create a new empty picture object
  78.    Set LoadImage = New StdPicture
  79.    
  80.    ' Get the IPersistStream interface
  81.    ' of the picture object
  82.    Set oPersist = LoadImage
  83.    
  84.    ' Load the picture from the stream
  85.    oPersist.Load oStream
  86.       
  87.    ' Release the streamobject
  88.    Set oStream = Nothing
  89.    
  90. End Function
  91. Public Function LoadImageEx(ByVal id As Long, ByVal readtype As String) As StdPicture
  92. Dim tArr() As Byte
  93. tArr = LoadResData(ByVal id, ByVal readtype)
  94. Set LoadImageEx = LoadImage(tArr)
  95. End Function