Public Function SaveJpgPicToFile(ByVal nPic As StdPicture, ByVal FileName As String, _
ByVal nType As PicType , ByVal Quality As Byte , _
ByVal TIFF_ColorDepth As Long , ByVal TIFF_Compression As Long ) As String
Dim dl As Long, nGDIP As Long, nBMP As Long
Dim nGSI As GdiplusStartupInput, B() As Byte
On Error GoTo Cuo
nGSI.GdiplusVersion = 1 ' 初始化 GDI+
dl = GdiplusStartup(nGDIP, nGSI)
If dl <> 0 Then SaveJpgPicToFile = "无法创建 GDI 图像": Exit Function
dl = GdipCreateBitmapFromHBITMAP(nPic.Handle, 0, nBMP)
If dl <> 0 Then GdiplusShutdown nGDIP: SaveJpgPicToFile = "不支持图片格式": Exit Function
Dim mGUID As GUID, mEP As EncoderParameters If LCase(Right(FileName, 4)) <> ".jpg" Then FileName = FileName & ".jpg"
CLSIDFromString StrPtr("{557CF401-1A04-11D3-9A73-0000F81EF32E}"), mGUID
mEP.Count = 1
With mEP.Parameter
CLSIDFromString StrPtr("{1D5BE4B5-FA4A-452D-9CDD-5DB35105E7EB}"), .nGUID
.NumberOfValues = 1
.Type = 4
.Value = VarPtr(Quality)
End With
ReDim B(1 To Len(mEP))
Call CopyMemory(B(1), mEP, Len(mEP))
dl = GdipSaveImageToFile(nBMP, StrPtr(FileName), mGUID, B(1))
GdipDisposeImage nBMP
GdiplusShutdown nGDIP
Exit FunctionCuo: SaveJpgPicToFile = "错误 "
End Function这是全部函数,我在屏幕截图后,用此保存成jpg图像没问题,就是在在运行此函数时,会造成有些应用程序的图像失真,比如我在后台运行定时截图,同时前台运行游戏帝国时代时,在发生截图时,此游戏中的草地和水均失真,造成丢色严重,保存图像质量我设置为15,我考虑是否由此引起的,可是如果是由此引起的,那么如何在截完图后恢复成正常值呢?请各位帮忙解决一下
ByVal nType As PicType , ByVal Quality As Byte , _
ByVal TIFF_ColorDepth As Long , ByVal TIFF_Compression As Long ) As String
Dim dl As Long, nGDIP As Long, nBMP As Long
Dim nGSI As GdiplusStartupInput, B() As Byte
On Error GoTo Cuo
nGSI.GdiplusVersion = 1 ' 初始化 GDI+
dl = GdiplusStartup(nGDIP, nGSI)
If dl <> 0 Then SaveJpgPicToFile = "无法创建 GDI 图像": Exit Function
dl = GdipCreateBitmapFromHBITMAP(nPic.Handle, 0, nBMP)
If dl <> 0 Then GdiplusShutdown nGDIP: SaveJpgPicToFile = "不支持图片格式": Exit Function
Dim mGUID As GUID, mEP As EncoderParameters If LCase(Right(FileName, 4)) <> ".jpg" Then FileName = FileName & ".jpg"
CLSIDFromString StrPtr("{557CF401-1A04-11D3-9A73-0000F81EF32E}"), mGUID
mEP.Count = 1
With mEP.Parameter
CLSIDFromString StrPtr("{1D5BE4B5-FA4A-452D-9CDD-5DB35105E7EB}"), .nGUID
.NumberOfValues = 1
.Type = 4
.Value = VarPtr(Quality)
End With
ReDim B(1 To Len(mEP))
Call CopyMemory(B(1), mEP, Len(mEP))
dl = GdipSaveImageToFile(nBMP, StrPtr(FileName), mGUID, B(1))
GdipDisposeImage nBMP
GdiplusShutdown nGDIP
Exit FunctionCuo: SaveJpgPicToFile = "错误 "
End Function这是全部函数,我在屏幕截图后,用此保存成jpg图像没问题,就是在在运行此函数时,会造成有些应用程序的图像失真,比如我在后台运行定时截图,同时前台运行游戏帝国时代时,在发生截图时,此游戏中的草地和水均失真,造成丢色严重,保存图像质量我设置为15,我考虑是否由此引起的,可是如果是由此引起的,那么如何在截完图后恢复成正常值呢?请各位帮忙解决一下
疑问二:如果是由于设置质量低造成的,如果解决?
请赐教
为什么 销毁GDI时会造成屏幕内一下,其它应用程序中显示的图像失真