电脑教程
位置:首页>> 电脑教程>> 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
投稿

猜你喜欢

  • 不知道是否与版本过旧有关,小编电脑中的Word2007打开后经常出现配置进度的读条,且每次都要等很久才能打开要看的文件!那么,该如何解决这一
  • word2010中怎么设置鼠标指向按钮后显示提示?word中想设置这样一个功能,就是鼠标指向按钮以后直接提示这个按钮的功能文字说明,该怎么设
  • 网络凭据是为了方便用户访问网络资源存储在本机的帐户和密码,它可以让用户无须输入帐户和密码就可以访问。那么用户如果不想让网络凭据继续使用的话,
  • Win10系统是大家都在使用的电脑操作系统,有许多使用win10系统的用户都想在路由器上组建家庭局域网,但是不知道该怎么去操作,其实方法很简
  • 对于表格的标题,我们总是让其位于整个工作表的中间对于表格的标题,我们总是让其位于整个工作表的中间,对于这一居中的结果,我们通常是用“合并及居
  • 可以将页边距都设置为0,这样就可以布满整个A4页面。1、单击页面布局选项卡右下角如图所示的按钮;2、弹出页面设置对话框,在页边距选项卡上,将
  • Win10系统要安装杀毒软件吗?很多用户都不了解,其实,win10系统已经自带了杀毒与防火墙,而且与系统更兼容,安全性很高。但是很多用户都觉
  • 在Word 2007文档中,用户可以很容易地将文字转换成表格。其中关键的操作是使用分隔符号将文本合理分隔。那么具体步骤应该怎么操作呢?接下来
  • 平时工作时,制作一些表格时,很多时候需要做一个下拉单元格列表,此时就可以使用Excel表格的“数据有效性”,恰当的设置下拉单元格,不仅可以快
  • excel表格中怎样自动填充序数?excel表格中的数据很多,想要填充序数可以快速的了解数据量,手动填充太麻烦,今天我们就来介绍两种自动填充
  • 在我们平时使用Word文档办公时,有的时候会使用Word文档来编辑我们的个人简历。其中我们的照片是个人简历中不可缺少的一部分,但是当我们往W
  • 辛辛苦苦地设计了一个个人简历表格,却被别人毛手毛脚地搞乱了,是不是很恼火?如果是私人文件还好,只要设个密码就可以了,偏偏这是要别人往里面填数
  • 号外!号外!Word2013也有截图功能啦!不用QQ,不用键盘上的截图键,我们也能照样轻松搞定截图。什么?你不知道怎么做么?没关系,看看下面
  • Win10系统发布也有些日子了,微软为用户增加了许多功能,这些功能都是为了提高用户的使用感受而开发的,在Win10中,音识别,但是有些用户,
  • 很多朋友喜欢在word中制作表格,但是会经常遇见一个问题,那就是将表的行与列转置,比如说书将三行四列的表格转置成四行三列的样式,那么我们应该
  • 今天我们更深入的来说一下如何自定义excel 的三色刻度颜色,设置excel三色刻度颜色的步骤如下:1、首先选中需要设置三色刻度的单元格,然
  • Excel中怎么绘制双层饼图?有时候我们在制作excel图标的时候,为了更清楚的表示其中的参数, 可以使用双层图标,这样区域分明,数据清晰,
  • 小伙伴们在存储上传文件的时候发现格式不对或者不符合,但是不知道怎么修改文件属性,其实最简单的方法就是,打开隐藏的已知文件类型的扩展名,然后修
  • 在Excel中复制单元格内容时,被复制的单元格或区域周围会出现一个虚线框,表示一次复制可以进行多次粘贴,但复制完毕后需要按ESC键取消,这显
  • excel表格系统默认的背景是白色的,这个颜色不仅伤眼,而且看多了总是会有点不爽的感觉,那么有没有办法可以更换背景图片呢?今天,小编就教大家
手机版 电脑教程 asp之家 www.aspxhome.com