我在SQL Server中有一个PNG图片,我成功获取图像并将其保存到文件。
rs.Open "Select pic from Table", connObj, adOpenDynamic, adLockOptimistic
If rs.RecordCount > 0 Then
If Not IsNull(rs.Fields("pic").Value) Then
Set mstream = New ADODB.Stream
mstream.Type = adTypeBinary
mstream.Open
mstream.Write rs.Fields("pic").Value
mstream.SaveToFile App.Path & "MyPhoto.jpg", adSaveCreateOverWrite
End If
End If
rs.Close
您可以看到,我已经将我的扩展名为.jpg,但我认为这并不重要,当我使用LoadPicture()
中使用VB6应用程序中的图像时,我会遇到Invalid Picture
错误。如果我打开图像并将其重新保存为JPG或BMP,则LoadPicture()
可以工作。
那么,如何正确保存图片为BMP/JPG?
您可能会发现这两个功能有用
Private Function LoadPictureFromBlob(baData() As Byte) As StdPicture
With CreateObject("WIA.Vector")
.BinaryData = baData
Set LoadPictureFromBlob = .Picture
End With
End Function
Private Sub SavePictureToJpg(oPic As StdPicture, sFile As String, Optional ByVal Quality = 80)
Const wiaFormatJPEG As String = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"
Dim oImg As Object
SavePicture oPic, sFile
Set oImg = CreateObject("WIA.ImageFile")
oImg.LoadFile sFile
With CreateObject("WIA.ImageProcess")
.Filters.Add .FilterInfos("Convert").FilterID
.Filters.Item(1).Properties("FormatID").Value = wiaFormatJPEG
.Filters.Item(1).Properties("Quality").Value = Quality
Set oImg = .Apply(oImg)
End With
On Error Resume Next
Kill sFile
On Error GoTo 0
oImg.SaveFile sFile
End Sub
只需使用Set oPic = LoadPictureFromBlob(rs.Fields("pic").Value)
读取.png
,然后使用内置的SavePicture oPic, App.Path & "MyPhoto.bmp"
保存到.bmp
或SavePictureToJpg oPic, App.Path & "MyPhoto.jpg"
用于.jpg
并决定可选质量参数。