图片格式转换的代码
(2019-07-11 08:26:24)
标签:
图片格式格式转换vb代码 |
分类: VB编程 |
图片格式转换的代码
想在自己的程序中将图片随心所欲地转换成各种主流格式吗?没问题,本代码就让你实现这个心愿!
本代码能够将图像保存为5种主流格式:bmp、jpg、png、gif、tif。代码很简炼,就不多作解释了。需要说明的是转换后的gif格式是单张图像,而不是gif动画。
新建一个窗体,在上面添加一个图片框和一个按纽。窗体和图片框的ScaleMode属性都设置为3,图片框的名称改为pic3(呵呵,这是因为在我的程序中,它就是这个名称,当然你可以改为任意名称,但有关代码必须也要相应改动)。
代码如下:
Option Explicit
Private Enum EncoderParameterValueTyp
End Enum
Private Type GdiplusStartupInput
End Type
Private Type EncoderParameter1
End Type
Private Type EncoderParameters1
End Type
Private Type ImageCodecInfo
End Type
Private Type GUID
End Type
Private Type EncoderParameter
End Type
Private Type EncoderParameters
End Type
Private Declare Sub GdiplusShutdown Lib "gdiplus" (ByVal Token
As Long)
Private Declare Function GdiplusStartup Lib "gdiplus" (Token As
Long, inputbuf As GdiplusStartupInput, Optional ByVal outputbuf As
Long = 0) As Long
Private Declare Function GdipSaveImageToFile Lib "gdiplus" (ByVal
hImage As Long, ByVal sFilename As Long, clsidEncoder As Any,
encoderParams As Any) As Long
Private Declare Function GdipDisposeImage Lib "gdiplus" (ByVal
Image As Long) As Long
Private Declare Function GdipCreateBitmapFromHBIT
Private Declare Function GdipGetImageEncodersSize
Private Declare Function GdipGetImageEncoders Lib "gdiplus" (ByVal
numEncoders As Long, ByVal Size As Long, Encoders As Any) As
Long
Private Declare Function GdipCreateFromHDC Lib "gdiplus.dll" (ByVal
hdc As Long, ByRef graphics As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias
"RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As
Long)
Private Declare Function lstrlenW Lib "kernel32" (ByVal psString As
Any) As Long
Private Declare Function CLSIDFromString Lib "ole32" (ByVal
lpszProgID As Long, pCLSID As Any) As Long
Private Declare Function GdipBitmapSetResolution Lib "gdiplus"
(ByVal Bitmap As Long, ByVal xdpi As Single, ByVal ydpi As Single)
As Long
Private Enum ImageFileFormat
End Enum
Private Sub Command1_Click()
On Error GoTo 100
Dim OpenName As String
Dim dlg As Object
Set dlg = CreateObject("MSComDlg.CommonDialog")
With dlg
End With
Pic3.Picture = LoadPicture(OpenName)
SavePic Pic3, "C:\Users\Administrator\Desktop\100.bmp", 1
SavePic Pic3, "C:\Users\Administrator\Desktop\100.jpg", 2
SavePic Pic3, "C:\Users\Administrator\Desktop\100.png", 3
SavePic Pic3, "C:\Users\Administrator\Desktop\100.gif", 4
SaveTif Pic3, "C:\Users\Administrator\Desktop\100.tif"
MsgBox "转换并保存完毕"
100
End Sub
'输入参数:1.对象,2.文件名,3.tif颜色深度,4.tif压缩比
Private Function SaveTif(ByVal pict As StdPicture, SaveName As
String, Optional ByVal TIF_ColorDepth As Long = 24, Optional ByVal
TIF_Compression As Long = 6) As Integer
On Error GoTo 100
Dim lBitmap As Long
Dim aEncParams() As Byte
Dim m_lngGraphics As Long
Dim tJpgEncoder As GUID
Dim tParams As EncoderParameters '初始化解码器的GUID标识
Dim udtData As GdiplusStartupInput
Dim lGDIP As Long
udtData.GdiplusVersion = 1 'GDI+初始化
GdiplusStartup lGDIP, udtData, 0
If GdipCreateFromHDC(Pic3.hdc, m_lngGraphics) Then MsgBox "未能创建
Graphics 对象": Exit Function
If GdipCreateBitmapFromHBIT
CLSIDFromString StrPtr("{557CF405-1A04-11D3-9A73-0000F81EF32E}"),
tJpgEncoder
tParams.Count = 2
ReDim aEncParams(1 To Len(tParams) + Len(tParams.Parameter))
With tParams.Parameter
End With
Call CopyMemory(aEncParams(1), tParams, Len(tParams))
With tParams.Parameter
End With
Call CopyMemory(aEncParams(Len(tParams) + 1), tParams.Parameter,
Len(tParams.Parameter))
GdipSaveImageToFile lBitmap, StrPtr(SaveName), tJpgEncoder,
aEncParams(1) '保存图像
GdipDisposeImage lBitmap '销毁GDI+图像
Erase aEncParams
100
GdiplusShutdown lGDIP
SaveTif = Err.Number
End Function
Private Function SavePic(Stdpic As StdPicture, ByVal FileName As
String, Optional ByVal FileFormat As ImageFileFormat = Jpg,
Optional ByVal JpgQuality As Long = 85, Optional ByVal
TIF_ColorDepth As Long = 24, Optional ByVal TIF_Compression As Long
= 6) As Boolean
Dim CLSID(3) As Long
Dim Bitmap
Dim Token
Dim
Gsp
Gsp.GdiplusVersion =
1
GdiplusStartup Token, Gsp '初始化GDI+
GdipCreateBitmapFromHBIT
If Bitmap <> 0 Then
End If
GdipDisposeImage Bitmap '释放资源
GdiplusShutdown Token
End Function
Private Function GetEncoderClsID(strMimeType As String,
ClassID() As Long) As Long
Dim
Num
Dim
Size
Dim
I
Dim Info()
Dim Buffer() As Byte
GetEncoderClsID = -1
GdipGetImageEncodersSize
If Size <> 0 Then
End If
End Function
Private Function PtrToStrW(ByVal lpsz As Long) As String
Dim Out
Dim Length As Long
Length = lstrlenW(lpsz)
If Length > 0 Then
End If
End Function

加载中…