首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

VB6使用GDI+显示缩略图关键疑难点,请问大侠

2012-02-03 
VB6使用GDI+显示缩略图关键疑难点,请教大侠。使用VB6写了一个显示缩略图的模块文件,模块文件中声明了一下函

VB6使用GDI+显示缩略图关键疑难点,请教大侠。
使用VB6写了一个显示缩略图的模块文件,模块文件中声明了一下函数:

Private Declare Function GdiplusStartup Lib "gdiplus" (token As Long, inputbuf As GdiPlusStartupInput, Optional ByVal outputbuf As Long = 0) As GpStatus
 Private Declare Function GdiplusShutdown Lib "gdiplus" (ByVal token As Long) As GpStatus
 Private Declare Function GdipDrawImage Lib "gdiplus" (ByVal graphics As Long, ByVal Image As Long, ByVal X As Single, ByVal Y As Single) As GpStatus
 Private Declare Function GdipDrawImageRect Lib "gdiplus" (ByVal graphics As Long, ByVal Image As Long, ByVal X As Single, ByVal Y As Single, ByVal Width As Single, ByVal Height As Single) As GpStatus
 Private Declare Function GdipCreateFromHDC Lib "gdiplus" (ByVal hDC As Long, graphics As Long) As GpStatus
 Private Declare Function GdipDeleteGraphics Lib "gdiplus" (ByVal graphics As Long) As GpStatus
 Private Declare Function GdipLoadImageFromFile Lib "gdiplus" (ByVal filename As String, Image As Long) As GpStatus
 Private Declare Function GdipDisposeImage Lib "gdiplus" (ByVal Image As Long) As GpStatus
 Private Declare Function GdipGetImageWidth Lib "gdiplus" (ByVal Image As Long, Width As Long) As GpStatus
 Private Declare Function GdipGetImageHeight Lib "gdiplus" (ByVal Image As Long, Height As Long) As GpStatus
 Private Declare Function GdipDrawImageRectI Lib "gdiplus" (ByVal graphics As Long, ByVal Image As Long, ByVal X As Long, ByVal Y As Long, ByVal Width As Long, ByVal Height As Long) As GpStatus


程序中需要调用一个函数,把原图片加载到内存。
这个函数:GdipLoadImageFromFile StrConv(ImagePath, vbUnicode), gdip_Image

就是上面这个函数,有时候可以成功调用,有时候却不可以。后来自己仔细查了一下资料,说是跟调用StrConv()函数返回的字符串有关,还有一个类似StrConv()的函数是StrPrt(),用了以后跟使用StrConv()出现的情况一样,甚至我直接在GdipLoadImageFromFile 中使用图片文件路径作为第一个参数也不行,总之,GdipLoadImageFromFile 这个函数有时候返回成功可以显示缩略图,有时却调用失败。关键是StrConv函数的返回值跟GdipLoadImageFromFile 的调用成功与否关系始终没搞清楚。


希望有过类似经历并且已经解决问题的大侠给以指点,谢谢。



[解决办法]
是不是该用:
StrConv(ImagePath, vbFromUnicode)

[解决办法]
有日文、韩文这类东西?
[解决办法]
StrConv 加上 $
分别试一下:

StrConv$(ImagePath, vbFromUnicode)
StrConv$(ImagePath, vbnicode)


[解决办法]
StrConv 加上 $
分别试一下:

StrConv$(ImagePath, vbFromUnicode)
StrConv$(ImagePath, vbUnicode)

[解决办法]
以下代码没发现问题

VB code
Option ExplicitPrivate Type GdiplusStartupInput     GdiplusVersion As Long     DebugEventCallback As Long     SuppressBackgroundThread As Long     SuppressExternalCodecs As LongEnd TypePrivate Enum GpStatus  'Status     Ok = 0     GenericError = 1     InvalidParameter = 2     OutOfMemory = 3     ObjectBusy = 4     InsufficientBuffer = 5     NotImplemented = 6     Win32Error = 7     WrongState = 8     Aborted = 9     FileNotFound = 10     ValueOverflow = 11     AccessDenied = 12     UnknownImageFormat = 13     FontFamilyNotFound = 14     FontStyleNotFound = 15     NotTrueTypeFont = 16     UnsupportedGdiplusVersion = 17     GdiplusNotInitialized = 18     PropertyNotFound = 19     PropertyNotSupported = 20End EnumPrivate Declare Function GdiplusStartup Lib "gdiplus" (token As Long, inputbuf As GdiplusStartupInput, Optional ByVal outputbuf As Long = 0) As GpStatusPrivate Declare Function GdiplusShutdown Lib "gdiplus" (ByVal token As Long) As GpStatusPrivate Declare Function GdipDrawImageRect Lib "gdiplus" (ByVal graphics As Long, ByVal Image As Long, ByVal X As Single, ByVal Y As Single, ByVal Width As Single, ByVal Height As Single) As GpStatusPrivate Declare Function GdipCreateFromHDC Lib "gdiplus" (ByVal hDC As Long, graphics As Long) As GpStatusPrivate Declare Function GdipDeleteGraphics Lib "gdiplus" (ByVal graphics As Long) As GpStatusPrivate Declare Function GdipLoadImageFromFile Lib "gdiplus" (ByVal filename As String, Image As Long) As GpStatusPrivate Declare Function GdipDisposeImage Lib "gdiplus" (ByVal Image As Long) As GpStatusDim gdip_Token As LongDim gdip_Image As LongDim gdip_Graphics As Long'-------------缩略图函数-----------Public Sub ShowTNImg(PBox As Object, ImagePath As String, WidthMax As Long, HeightMax As Long)     LoadGDIP     If GdipCreateFromHDC(PBox.hDC, gdip_Graphics) <> 0 Then         MsgBox "出现错误!", vbCritical, "错误"         GdiplusShutdown gdip_Token         End     End If    '载入图片到内存中     GdipLoadImageFromFile StrConv(ImagePath, vbUnicode), gdip_Image    '使用GDI+直接从内存中缩略并绘图,GDI+有很好的反锯齿能力     If GdipDrawImageRect(gdip_Graphics, gdip_Image, 0, 0, WidthMax, HeightMax) <> Ok Then Debug.Print "显示失败。。。"     DisposeGDIPEnd SubPublic Sub LoadGDIP()     Dim GpInput As GdiplusStartupInput     GpInput.GdiplusVersion = 1     If GdiplusStartup(gdip_Token, GpInput) <> 0 Then         MsgBox "加载GDI+失败!", vbCritical, "加载错误"         End     End IfEnd SubPublic Sub DisposeGDIP()     GdipDisposeImage gdip_Image     GdipDeleteGraphics gdip_Graphics     GdiplusShutdown gdip_TokenEnd Sub 


[解决办法]
参考

向大家求助一个GDI绘文字中文乱码问题
[解决办法]

热点排行