VB中关于PNG图片问题

这段代码做出类似Photoshop的启动效果可惜要占用大量内存.请高手对代码优化..真是搞不明白!!或者给出其它类似效果的方法...以下窗体,API声明省去了因为太多了呵... 这段代码做出类似Photoshop的启动效果
可惜要占用大量内存.请高手对代码优化..真是搞不明白!!
或者给出其它类似效果的方法...
以下窗体,API声明省去了 因为太多了 呵呵
Dim mDC As Long
Dim mainBitmap As Long
Dim blendFunc32bpp As BLENDFUNCTION
Dim token As Long
Dim oldBitmap As Long

Private Sub Form_DblClick()

Unload Me

End Sub

Private Sub Form_Load()

Dim GpInput As GdiplusStartupInput
GpInput.GdiplusVersion = 1

If GdiplusStartup(token, GpInput) <> 0 Then
MsgBox "Fehler bem laden von GDI+!", vbCritical
Unload Me
End If

MakeTrans (App.Path & "\splash.png")

End Sub

Private Sub Form_Unload(Cancel As Integer)

Call GdiplusShutdown(token)
SelectObject mDC, oldBitmap
DeleteObject mainBitmap
DeleteObject oldBitmap
DeleteDC mDC

End Sub

Private Function MakeTrans(pngPath As String) As Boolean

Dim tempBI As BITMAPINFO
Dim tempBlend As BLENDFUNCTION
Dim lngHeight As Long, lngWidth As Long
Dim curWinLong As Long
Dim img As Long
Dim graphics As Long
Dim winSize As Size
Dim srcPoint As POINTAPI

With tempBI.bmiHeader
.biSize = Len(tempBI.bmiHeader)
.biBitCount = 32
.biHeight = Me.ScaleHeight
.biWidth = Me.ScaleWidth
.biPlanes = 1
.biSizeImage = .biWidth * .biHeight * (.biBitCount / 8)
End With
mDC = CreateCompatibleDC(Me.hdc)
mainBitmap = CreateDIBSection(mDC, tempBI, DIB_RGB_COLORS, ByVal 0, 0, 0)
oldBitmap = SelectObject(mDC, mainBitmap)

Call GdipCreateFromHDC(mDC, graphics)
Call GdipLoadImageFromFile(StrConv(pngPath, vbUnicode), img)
Call GdipGetImageHeight(img, lngHeight)
Call GdipGetImageWidth(img, lngWidth)
Call GdipDrawImageRect(graphics, img, 0, 0, lngWidth, lngHeight)

curWinLong = GetWindowLong(Me.hwnd, GWL_EXSTYLE)

SetWindowLong Me.hwnd, GWL_EXSTYLE, curWinLong Or WS_EX_LAYERED
SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE

srcPoint.x = 0
srcPoint.y = 0
winSize.cx = Me.ScaleWidth
winSize.cy = Me.ScaleHeight

With blendFunc32bpp
.AlphaFormat = AC_SRC_ALPHA
.BlendFlags = 0
.BlendOp = AC_SRC_OVER
.SourceConstantAlpha = 255
End With

Call GdipDisposeImage(img)
Call GdipDeleteGraphics(graphics)
Call UpdateLayeredWindow(Me.hwnd, Me.hdc, ByVal 0&, winSize, mDC, srcPoint, 0, blendFunc32bpp, ULW_ALPHA)

End Function
图片只有114K 程序运行要占用240MB内存...问题就在这
展开
 我来答
wildfox
2008-04-21 · 超过49用户采纳过TA的回答
知道小有建树答主
回答量:151
采纳率:0%
帮助的人:40.2万
展开全部
把图片压缩下吧,代码没啥毛病,问题是图片全部加载进内存了。

可以使用jpg格式的压缩图片,会减少很多内存消耗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友fde8673
2008-04-21 · TA获得超过423个赞
知道小有建树答主
回答量:401
采纳率:0%
帮助的人:549万
展开全部
还没看代码,但是请先检查一下用过的对象有没有释放
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式