excelvba。从图像控件获取ADODB流(不使用LoadFromFile)
通过以下功能,我可以从文件中加载图片并将其编码到base64:excelvba。从图像控件获取ADODB流(不使用LoadFromFile),excel,vba,adodb,Excel,Vba,Adodb,通过以下功能,我可以从文件中加载图片并将其编码到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 readi
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-通过使用对话框选择图像来加载图像,调整其大小并将其显示到图像中。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-通过从图像控件Me.Image1.Picture
-3-将加载的数据传递给encode\u to\u base64函数
问题是,我不知道如何更改上面的
ADODB.stream
代码,这样它就不会从文件加载图片,而是从Me.Image1.picture
加载图片,然后将其编码为base64。这应该是可能的,因为我发现了类似的东西。我真的不明白。现在我必须加载图片两次:一次用于在Me.Image1.picture
中显示图片,另一次用于将其编码为base64。但正如前面所说,我想调整图像大小,然后对其进行编码,因此在将其传递给编码函数之前,我需要调整图像大小。因此,我想从Me.Image.Picture
中获取数据流。因为您知道如何在64b模式下读取文件,所以我的意思是1。读取文件,2。调整大小,3。写回文件,4。以64b模式阅读,明白了。这可能是解决问题的“最后手段”。我真的不明白。现在我必须加载图片两次:一次用于在Me.Image1.picture
中显示图片,另一次用于将其编码为base64。但正如前面所说,我想调整图像大小,然后对其进行编码,因此在将其传递给编码函数之前,我需要调整图像大小。因此,我想从Me.Image.Picture
中获取数据流。因为您知道如何在64b模式下读取文件,所以我的意思是1。读取文件,2。调整大小,3。写回文件,4。以64b模式阅读,明白了。这可能是解决问题的“最后手段”。