查看: 35  |  回复: 0
  VB6 代码管家-压缩图片
楼主
发表于 2024年12月8日 21:50
'注:须添加一个按扭和一个图片框
Option Explicit
Private Type GUID
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(0 To 7) As Byte
End Type

Private Type GdiplusStartupInput
    GdiplusVersion As Long
    DebugEventCallback As Long
    SuppressBackgroundThread As Long
    SuppressExternalCodecs As Long
End Type

Private Type EncoderParameter
    GUID As GUID
    NumberOfValues As Long
    type As Long
    Value As Long
End Type

Private Type EncoderParameters
    Count As Long
    Parameter As EncoderParameter
End Type

Private Declare Function GdiplusStartup Lib "GDIPlus" (token As Long, inputbuf As GdiplusStartupInput, ByVal outputbuf As Long) As Long
Private Declare Function GdiplusShutdown Lib "GDIPlus" (ByVal token As Long) As Long
Private Declare Function GdipCreateBitmapFromHBITMAP Lib "GDIPlus" (ByVal hbm As Long, ByVal hpal As Long, Bitmap As Long) As Long
Private Declare Function GdipDisposeImage Lib "GDIPlus" (ByVal Image As Long) As Long
Private Declare Function GdipSaveImageToFile Lib "GDIPlus" (ByVal Image As Long, ByVal filename As Long, clsidEncoder As GUID, encoderParams As Any) As Long
Private Declare Function CLSIDFromString Lib "ole32" (ByVal str As Long, id As GUID) As Long
Private Declare Function GdipCreateBitmapFromFile Lib "GDIPlus" (ByVal filename As Long, Bitmap As Long) As Long
Dim 压缩率 As Integer
Private Sub Command1_Click()
    压缩率 = 100                                  '设置压缩率
    Dim ret As Boolean
    Picture1.Picture = LoadPicture("C:\1.bmp")    '打开要压缩的图片
    ret = PictureBoxSaveJPG(Picture1, "C:\2.jpg") '保存压缩后的图片
    If ret = False Then
    MsgBox "保存失败"
    End If
End Sub

Private Function PictureBoxSaveJPG(ByVal pict As StdPicture, ByVal filename As String, Optional ByVal quality As Byte = 15) As Boolean
    Dim tSI As GdiplusStartupInput
    Dim lRes As Long
    Dim lGDIP As Long
    Dim lBitmap As Long
     
    '初始化 GDI+
    tSI.GdiplusVersion = 1
    lRes = GdiplusStartup(lGDIP, tSI, 0)
     
    If lRes = 0 Then
    '从句柄创建 GDI+ 图像
    lRes = GdipCreateBitmapFromHBITMAP(pict.Handle, 0, lBitmap)
         
    If lRes = 0 Then
    Dim tJpgEncoder As GUID
    Dim tParams As EncoderParameters
             
    '初始化解码器的GUID标识
    CLSIDFromString StrPtr("{557CF401-1A04-11D3-9A73-0000F81EF32E}"), tJpgEncoder
             
    '设置解码器参数
    tParams.Count = 1
    With tParams.Parameter ' Quality
    '得到Quality参数的GUID标识
    CLSIDFromString StrPtr("{1D5BE4B5-FA4A-452D-9CDD-5DB35105E7EB}"), .GUID
    .NumberOfValues = 1
    .type = 4
    .Value = VarPtr(压缩率)
    End With
             
    '保存图像
    lRes = GdipSaveImageToFile(lBitmap, StrPtr(filename), tJpgEncoder, tParams)
             
    '销毁GDI+图像
    GdipDisposeImage lBitmap
    End If
         
    '销毁 GDI+
    GdiplusShutdown lGDIP
    End If
     
    If lRes Then
        PictureBoxSaveJPG = False
    Else
        PictureBoxSaveJPG = True
    End If
End Function


您需要登录后才可以回帖 登录 | 立即注册
【本版规则】请勿发表违反国家法律的内容,否则会被冻结账号和删贴。
用户名: 立即注册
密码:
2020-2024 MaNongKu.com