-1
私は別のアプリケーションを使って画像から生成されたbase64文字列を持っています。今私のアプリケーションでは、Base64文字列をバイトに変換してPictureBoxに表示したいと思っています。base64文字列からバイト画像へ
バイト入力を受け取り、ピクチャボックスイメージを設定するサンプルアプリケーションが見つかりました。残念なことに、サンプルアプリケーションはイメージからバイト配列を取得し、それを元に戻します。ここでは、それが使用する関数です。
Public Function PictureFromByteStream(b() As Byte) As IPicture
Dim LowerBound As Long
Dim ByteCount As Long
Dim hMem As Long
Dim lpMem As Long
Dim IID_IPicture(15)
Dim istm As stdole.IUnknown
On Error GoTo Err_Init
If UBound(b, 1) < 0 Then
Exit Function
End If
LowerBound = LBound(b)
ByteCount = (UBound(b) - LowerBound) + 1
hMem = GlobalAlloc(&H2, ByteCount)
If hMem <> 0 Then
lpMem = GlobalLock(hMem)
If lpMem <> 0 Then
MoveMemory ByVal lpMem, b(LowerBound), ByteCount
Call GlobalUnlock(hMem)
If CreateStreamOnHGlobal(hMem, 1, istm) = 0 Then
If CLSIDFromString(StrPtr("{7BF80980-BF32-101A-8BBB-00AA00300CAB}"), IID_IPicture(0)) = 0 Then
Call OleLoadPicture(ByVal ObjPtr(istm), ByteCount, 0, IID_IPicture(0), PictureFromByteStream)
End If
End If
End If
End If
Exit Function
Err_Init:
If Err.Number = 9 Then
'Uninitialized array
MsgBox "You must pass a non-empty byte array to this function!"
Else
MsgBox Err.Number & " - " & Err.Description
End If
End Function
は、ここで私はバイトにbase64文字列を変換することが分かっ機能だが、それを変換しているようだが、私は上記の関数にバイトのデータを渡す際に、何の画像は表示されません。
Private Function DecodeBase64(ByVal strData As String) As Byte()
Dim objXML As MSXML2.DOMDocument
Dim objNode As MSXML2.IXMLDOMElement
' help from MSXML
Set objXML = New MSXML2.DOMDocument
Set objNode = objXML.createElement("b64")
objNode.dataType = "bin.base64"
objNode.Text = strData
DecodeBase64 = objNode.nodeTypedValue
' thanks, bye
Set objNode = Nothing
Set objXML = Nothing
End Function
ここでは関数を呼び出すコードを示します。
Dim b() As Byte
b = DecodeBase64(Text1.Text)
Dim pic As StdPicture
Set pic = PictureFromByteStream(b)
Set Picture1.Picture = pic
おかげで、私は、base64文字列をデコードするためにこれを使用してみましたが、私はまだ私のピクチャボックス上の画像を得ることはありません。 'byte()'から画像ボックスの画像を設定する関数はどうでしょうか?他の提案はありますか?正直なところ、どちらが間違っているのかわからない、関数はバイトに変換するか、関数をバイトから設定する。 – crimson589
最新の回答をご覧ください。 –
助けてくれてありがとう、本当に感謝しています。私はこれをいくつかの画像とbase64文字列で動作させましたが、問題があります。ここに私の問題がある。ベース64文字列は、PHPプログラムから来ます。私はvb6のイメージに与えるbase64文字列を変換することはできませんが、.NET 2010を使用してイメージに変換することができます。私はもう一度試しました.NET 2010を使ってbase64に同じイメージを変換しました。 vb6の画像に戻る。ここで何が問題なの? – crimson589