Excel Vba。 从Image控件获取ADODBstream(不与LoadFromFile)

使用下面的函数,我可以从文件加载一个图片,并将其编码为base64:

Public Function EncodeFileBase64() (strPicPath As String) As String Const adTypeBinary = 1 ' Binary file is encoded ' Variables for encoding Dim objXML Dim objDocElem ' Variable for reading binary picture Dim objStream ' Open data stream from picture Set objStream = CreateObject("ADODB.Stream") objStream.Type = adTypeBinary objStream.Open objStream.LoadFromFile (strPicPath) ' Create XML Document object and root node ' that will contain the data Set objXML = CreateObject("MSXml2.DOMDocument") Set objDocElem = objXML.CreateElement("Base64Data") objDocElem.DataType = "bin.base64" ' Set binary value objDocElem.nodeTypedValue = objStream.Read() ' Get base64 value ' EncodeFileBase64 = objDocElem.Text EncodeFileBase64 = Replace(objDocElem.Text, vbLf, "") ' Clean all Set objXML = Nothing Set objDocElem = Nothing Set objStream = Nothing End Function 

因为我想编码之前调整图像大小,所以我猜“逻辑”应该是:

– 1 –通过使用对话框select图像来加载图像,调整它的大小并将其显示在image.picture控件中:

 Private Sub CommandButtonImage_Click() With Application.FileDialog(msoFileDialogFilePicker) .AllowMultiSelect = False .ButtonName = "Submit" .Title = "Selezionare un'immagine" .Filters.Add "Image", "*.gif; *.jpg; *.jpeg; *.png", 1 If .Show = -1 Then ' file has been selected ' Resize somehow the image ' display preview image in an image control Me.Image1.PictureSizeMode = fmPictureSizeModeZoom Me.Image1.Picture = LoadPicture(.SelectedItems(1)) Else ' something End If End With End Sub 

– 2 –从Image Control Me.Image1.Picture加载图像数据

– 3 –将加载的数据传递给encode_to_base64 function

问题是,我不知道如何更改上面的ADODB.stream代码,以便它不会从文件加载图片,但它从Me.Image1.Picture加载图片,然后将其编码为base64。 这应该是可能的,因为我在这里find类似的东西 。