开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 2008|回复: 0
收起左侧

[源码分享] 一个可保存JPG图像的类源码

[复制链接]

结帖率:67% (16/24)
发表于 2012-6-21 16:54:53 | 显示全部楼层 |阅读模式   广东省广州市
上网掏到了一个JPEG类,可以将图像保存成JPEG,图素质量可调。
顺便做了一个测试程序。贡献给大家。
Option Explicit

Private Sub mnuExit_Click()
    Unload Me
    End
End Sub

Private Sub mnuOpen_Click()
    Dim strFile As String
    strFile = GetOpenFile(hwnd)
    If Len(strFile) > 0 Then
        picMain.Picture = LoadPicture(strFile)
    End If
End Sub

Private Sub mnuSaveAsBMP_Click()
    Dim strFile As String
    strFile = GetSaveFile(hwnd)
    If Len(strFile) = 0 Then Exit Sub
    strFile = CheckExt(strFile, ".bmp")
    SavePicture picMain.Picture, strFile
End Sub

Private Sub mnuSaveAsJPG_Click()
    Dim strFile As String
    strFile = GetSaveFile(hwnd, "JPG")
    strFile = CheckExt(strFile, ".jpg")
    Dim intQ As Integer
    intQ = Val(InputBox("请输入图像质量(1-100):", "JPEG图像质量", 90))
    '检查图像质量
    If intQ < 1 Then
        intQ = 1
    ElseIf intQ > 100 Then
        intQ = 100
    End If
    SaveJPEG strFile, picMain, True, CByte(intQ)
End Sub

Private Function SaveJPEG(ByVal Filename As String, Pic As PictureBox, Optional ByVal Overwrite As Boolean = True, Optional ByVal Quality As Byte = 90) As Boolean
    Dim JPEGclass As New ClsJPEG
    Dim m_Picture As IPictureDisp
    Dim m_DC As Long
    Dim m_Millimeter As Single
    m_Millimeter = ScaleX(100, vbPixels, vbMillimeters)
    Set m_Picture = Pic
    m_DC = Pic.hDC
    '检查文件名及图像
    If m_DC <> 0 And LenB(Filename) > 0 Then
        JPEGclass.Quality = Quality
        '全颜色保存
        JPEGclass.SetSamplingFrequencies 1, 1, 1, 1, 1, 1
        '从hDC拷贝图像
        If JPEGclass.SampleHDC(m_DC, CLng(m_Picture.Width / m_Millimeter), CLng(m_Picture.Height / m_Millimeter)) = 0 Then
            '如果设置覆盖模式且指定文件存在则删除原文件
            If Overwrite And LenB(Dir$(Filename)) > 0 Then Kill Filename
            '保存文件,成功返回True
            SaveJPEG = JPEGclass.SaveFile(Filename) = 0
        End If
    End If
    '释放空间
    Set JPEGclass = Nothing
End Function

'检查扩展名
Private Function CheckExt(Filename As String, ext As String) As String
    Dim i As Integer
    i = InStrRev(Filename, ".")
    If i <= 0 Then
        CheckExt = Filename & ext
    Else
        CheckExt = Left$(Filename, i - 1) & ext
    End If
End Function

类模块
'////////////////////////////////////////////////////
'
'                 JPEG Encoder Class
'      Written by John Korejwa <korejwa@tiac.net>
'
'////////////////////////////////////////////////////
Option Explicit

Option Base 0

'霍夫曼码

PictureSaveToJPEG.rar

13.03 KB, 下载次数: 14, 下载积分: 精币 -2 枚

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表