Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
excelvba。从图像控件获取ADODB流(不使用LoadFromFile)_Excel_Vba_Adodb - Fatal编程技术网

excelvba。从图像控件获取ADODB流(不使用LoadFromFile)

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

通过以下功能,我可以从文件中加载图片并将其编码到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-通过使用对话框选择图像来加载图像,调整其大小并将其显示到
图像中。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模式阅读,明白了。这可能是解决问题的“最后手段”。