电脑教程
位置:首页>> 电脑教程>> office教程>> excel VB 利用GDI+保存图片为JPG、TIFF、PNG、GIF、BMP等格式

excel VB 利用GDI+保存图片为JPG、TIFF、PNG、GIF、BMP等格式

  发布时间:2022-05-25 13:38:57 

标签:excel,利用,GDI+,保存,图片,为,JPG,TIFF,PNG,GIF

excel VB 利用GDI+保存图片为JPG、TIFF、PNG、GIF、BMP等格式
excel VB 利用GDI+保存图片为JPG、TIFF、PNG、GIF、BMP等格式

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, Optional ByVal outputbuf As Long = 0) 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 CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Dest As Any, Src As Any, ByVal cb As Long) As Long

'*************************************************************************
'** 作 者 : laviewpbt
'** 函 数 名 : SavePic
'** 输 入 : pic(StdPicture) - 图 象句柄
'** : FileName(String) - 保 存路径
'** : Quality(Byte) - JPG 图象质量
'** : TIFF_ColorDepth(Long) - TTF 格式的颜色深度
'** : TIFF_Compression(Long) - TTF 格式的压缩比
'** 输 出 : 无
'** 功能描述 : 把图象保存为JPG、 TIFF、PNG、GIF、BMP格式
'*************************************************************************
Private Sub SavePic(ByVal pict As StdPicture, _
ByVal FileName As String, _
PicType As String, _
Optional ByVal Quality As Byte = 80, _
Optional ByVal TIFF_ColorDepth As Long = 24, _
Optional ByVal TIFF_Compression As Long = 6)
Screen.MousePointer = vbHourglass
Dim tSI As GdiplusStartupInput
Dim lRes As Long
Dim lGDIP As Long
Dim lBitmap As Long
Dim aEncParams() As Byte
On Error GoTo ErrHandle:
tSI.GdiplusVersion = 1 ' 初始化 GDI+
lRes = GdiplusStartup(lGDIP, tSI)
If lRes = 0 Then ' 从句柄创建 GDI+ 图像
lRes = GdipCreateBitmapFromHBITMAP(pict.Handle, 0, lBitmap)
If lRes = 0 Then
Dim tJpgEncoder As GUID
Dim tParams As EncoderParameters '初始化解码器的GUID标识
Select Case PicType
Case ".jpg"
CLSIDFromString StrPtr("{557CF401-1A04-11D3-9A73-0000F81EF32E}"), tJpgEncoder
tParams.count = 1 ' 设置解码器参数
With tParams.Parameter ' Quality
CLSIDFromString StrPtr("{1D5BE4B5-FA4A-452D-9CDD-5DB35105E7EB}"), .GUID ' 得到Quality参数的GUID标识
.NumberOfValues = 1
.type = 4
.Value = VarPtr(Quality)
End With
ReDim aEncParams(1 To Len(tParams))
Call CopyMemory(aEncParams(1), tParams, Len(tParams))
Case ".png"
CLSIDFromString StrPtr("{557CF406-1A04-11D3-9A73-0000F81EF32E}"), tJpgEncoder
ReDim aEncParams(1 To Len(tParams))
Case ".gif"
CLSIDFromString StrPtr("{557CF402-1A04-11D3-9A73-0000F81EF32E}"), tJpgEncoder
ReDim aEncParams(1 To Len(tParams))
Case ".tiff"
CLSIDFromString StrPtr("{557CF405-1A04-11D3-9A73-0000F81EF32E}"), tJpgEncoder
tParams.count = 2
ReDim aEncParams(1 To Len(tParams) + Len(tParams.Parameter))
With tParams.Parameter
.NumberOfValues = 1
.type = 4
CLSIDFromString StrPtr("{E09D739D-CCD4-44EE-8EBA-3FBF8BE4FC58}"), .GUID ' 得到ColorDepth参数的GUID标识
.Value = VarPtr(TIFF_Compression)
End With
Call CopyMemory(aEncParams(1), tParams, Len(tParams))
With tParams.Parameter
.NumberOfValues = 1
.type = 4
CLSIDFromString StrPtr("{66087055-AD66-4C7C-9A18-38A2310B8337}"), .GUID ' 得到Compression参数的GUID标识
.Value = VarPtr(TIFF_ColorDepth)
End With
Call CopyMemory(aEncParams(Len(tParams) + 1), tParams.Parameter, Len(tParams.Parameter))
Case ".bmp" '可以提前写保存为BMP的代码,因为并没有用GDI+
SavePicture pict, FileName
Screen.MousePointer = vbDefault
Exit Sub
End Select
lRes = GdipSaveImageToFile(lBitmap, StrPtr(FileName), tJpgEncoder, aEncParams(1)) '保存图像
GdipDisposeImage lBitmap ' 销毁GDI+图像
End If
GdiplusShutdown lGDIP '销毁 GDI+
End If
Screen.MousePointer = vbDefault
Erase aEncParams
Exit Sub
ErrHandle:
Screen.MousePointer = vbDefault
MsgBox "在保存图片的过程中发生错误:" & vbCrLf & vbCrLf & "错误号: " & Err.Number & vbCrLf & "错误描述: " & Err.Description, vbInformation Or vbOKOnly, "错误"
End Sub

excel VB 利用GDI+保存图片为JPG、TIFF、PNG、GIF、BMP等格式的下载地址:

0
投稿

猜你喜欢

  • 用户在编辑Excel表格时,有些不会输入的公式或字符,可以用Excel2010中的屏幕截图工具进行截取在将其粘贴到相应位置,下面小编教大家怎
  • 鲁大师是很多用户电脑必备的一款电脑检测软件,不仅可以实时检测电脑的运行状态,还可以修复系统问题。如鲁大师检测到cpu运行时显示温度过高,这该
  • 什么是爱思出租机?爱思出租机,是“爱思助手”通过爱思租机业务租出去的机器,租赁期间机器归属权为“爱思助手”所有,爱思出租机仅供租机用户本人租
  • 在win10系统中,引入了虚拟桌面的新功能,广受GF用户好评。但是,当许多win10系统用户使用计算机时,他们不知道如何切换虚拟桌面。这非常
  • 打开Word,窗口默认标尺为2、4、6……38,这一数字表示什么单位呢?是厘米?是英寸?都不是;原来它是以字符为单位,在宋体五号字的格式下,
  • 不管是Word入门新手还是老手,相信这个word文档数字转换大写的小技巧会让你更加熟练Word,操作起来得心应手!1.数字转换成大写在一些表
  • 有不少win10系统用户发现电脑变慢了,检查之后发现C盘中有一个WinSXS文件夹占用内存空间很大,这样的情况要清理WinSXS文件夹,以下
  • 天天看视频怎么注销账号?天天看视频集搞笑、社会、影视、家庭等视频,是一款非常好用的短视频软件。天天看视频要怎么注销账号呢,下面就给大家分享具
  • 电脑配置是衡量一台电脑性能高低的标准,决定了电脑的运行速度。电脑配置主要看CPU、显卡、主板、内存、硬盘、等等。接下来,我就教大家查看电脑配
  • 最近有用户遇到了win10使用腾讯会议共享屏幕视频没声音的问题,腾讯会议软件具备简单易用、高清流畅、安全可靠的会议协作体验,不知win10使
  • win10如何清空剪贴板的内容?剪切板是用户最经常使用的系统功能,每次操作都会对内容进行临时缓存,长时间不清理的话,内容会积累,造成系统卡顿
  • Excel表格是我们在日常工作中常常需要使用到的一款办公软件。今天,小编将给大家分享的是Excel表格制作的基本方法,本教程对于只需要简单使
  • word怎么绘制带双箭头的曲线?带双箭头的直线想必大家都会画,直接选中word自选图形中的双箭头连接符即可!然而,绝大多数人肯定不清楚如何在
  • 无论你是精通多种语言,还是只需要完成外语作业,都可以使用Windows 8以多种语言进行阅读和输入。在某些国家或地区,你可以购买已经预安装多
  • Photoshop可以说是每个设计师都必须会用的设计工具之一了。为了设计要求,大家会在Photoshop里搭配一些ps插件来使用。这篇文章就
  • 我们在使用系统的时候,会弹出今日热点的弹窗广告,有的用户对此十分的反感,但是又不知道怎么关闭,下面教给大家关闭的方法,让大家不在受到今日热点
  • Instagram(照片墙)是一款运行在移动端上的社交应用,想不想更熟练的操作Instagram,下面小编推荐的这几款Instagram客户
  • WPS怎么设计漂亮的九宫格图片?wps中想要制作一个九宫格排版的图片效果,该怎么制作呢?下面我们就来看看详细的教程,需要的朋友可以参考下wp
  • 大家在使用电脑的过程中,难免会有一些不当操作或者错误操作,就有用户反映自己不小心将Win10自带浏览器删除了,这该怎么恢复?不要着急,下面小
  • originos系统已经发布了,很多的手机爱好者都已经迫不及待想要准备预约了,但是不知道该怎么去操作,今天就就给你们带来了originos预
手机版 电脑教程 asp之家 www.aspxhome.com