66357347
所属分类:GDI/图象编程
开发工具:Visual Basic
文件大小:349KB
下载次数:17
上传日期:2013-08-04 20:39:11
上 传 者:
ip222ddd
说明: VB使用GDI+显示PNG,将两幅图片叠加,有需要的就下载吧。
(VB use GDI+ display PNG, the superposition of two picture, has the need to download it.)
文件列表:
1.png (25796, 2010-01-06)
Bas (0, 2010-01-06)
Bas\ModPaintPNG.bas (4310, 2010-10-09)
Frm (0, 2010-01-06)
Frm\frmMain.frm (1328, 2010-10-09)
Frm\frmMain.frx (485210, 2010-01-06)
PaintPNG.vbp (942, 2010-01-06)
PaintPNG.vbw (86, 2010-10-09)
使用GDI+显示PNG图象,以及显示PNG图象时大小不正常的解决方案(VB6.0代码)
正在赶代码中.
其中一段界面效果里需要显示一个半透明的PNG图象,于是使用之前在网上搜索的一段代码,是封装为一个模块的.
结果发现一个怪异的事情,就是显示出来的PNG图象始终比它属性里的大小要大一定比例,约1.5倍左右...
真是怪哉.....
其显示部分的代码片段:
Public Sub PaintPng(ByVal sFileName As String, ByVal hdc As Long, ByVal mX As Long, ByVal mY As Long)
Call GDI_Initialize
If GdipCreateFromHDC(hdc, gdip_Graphics) <> Ok Then
GdiplusShutdown gdip_Token
Else
Call GdipLoadImageFromFile(StrConv(GetShortName(sFileName), vbUnicode), gdip_pngImage)
Call GdipDrawImage(gdip_Graphics, gdip_pngImage, mX, mY)
End If
Call GDI_Terminate
End Sub
就这几句,问题是,图象死活要大,非常非常之不解......
使用PS做了N个新的PNG图象,结果一样,不得不怀疑代码了.
然后又下载了另几个版本的代码,发现有一个代码可以正常显示同一PNG图象(下载地址: http://tieba.baidu.com/f?kz=669546344)
一分析,发现显示所用的API不是GdipDrawImage,而是GdipDrawImageRect,后者除了指定了一个左上角坐标外,还有两个参数是指定宽与高的.
当下就改了一下封装,测试通过,PNG图象以其原大小显示出来了,代码如下:
Public Sub PaintPng(ByVal sFileName As String, ByVal hdc As Long, ByVal mX As Long, ByVal mY As Long)
Dim lngHeight As Long, lngWidth As Long
Call GDI_Initialize
If GdipCreateFromHDC(hdc, gdip_Graphics) <> Ok Then
GdiplusShutdown gdip_Token
Else
Call GdipLoadImageFromFile(StrConv(GetShortName(sFileName), vbUnicode), gdip_pngImage)
Call GdipGetImageHeight(gdip_pngImage, lngHeight) '取高度
Call GdipGetImageWidth(gdip_pngImage, lngWidth) '取宽度
Call GdipDrawImageRect(gdip_Graphics, gdip_pngImage, mX, mY, lngWidth, lngHeight)
End If
Call GDI_Terminate
End Sub
这下总算正常了,感谢一下作者rewarddiy:)
继续折腾代码去,哎~~~~~~~~~
BY 嗷嗷叫的老马
2010-01-06 3:25
近期下载者:
相关文件:
收藏者: