VB6添加PNG图片

VB6添加PNG图片,第1张

vb要显示透明png,gdi+是最好的办法了,它支持半透明。但是,要下载gdiplus.tlb( http://www.vbaccelerator.com/article.asp?id=4588外国网站)并且引用才行。如果引用了gdiplus.tlb ,那么可以使用下面的代码。Private TOKEN As Long

Private Graphics As Long Private Sub InitGDIPlus()

'初始化GDI+

Dim uInput As GdiplusStartupInput

uInput.GdiplusVersion = 1

If GdiplusStartup(TOKEN, uInput) <>Ok Then

'初始化错误

MsgBox "GDI+ 初始化错误。程序即将关闭。", vbCritical, "InitError"

End

End If

GdipCreateFromHDC Me.hDC, Graphics

GdipSetSmoothingMode Graphics, SmoothingModeAntiAlias

End Sub

Private Sub Form_Load()

InitGDIPlusDim image As LongGdipCreateBitmapFromFile "E:\image1.png", image

GdipDrawImage Graphics, image, 0, 0

GdipDisposeImage image

End Sub

Private Sub TerminateGDIPlus()

GdipDeleteGraphics Graphics '释放graphics占用的内存

GdiplusShutdown TOKEN '关闭GDI+

End Sub

Private Sub Form_Unload(Cancel As Integer)

TerminateGDIPlus

End Sub看看flash控件那种完美的半透明效果,谁说做不了,不过我也不懂。哎,如果实在没招,用个flash也不错。

你可以使用MFC的CImage类,该类的头文件是atlimage.h

下面是示例代码:

CDC *pDC = GetDC()

CImage Image

Image.Load(strPath)

if (Image.IsNull())

{

    MessageBox(_T("没加载成功"))

    return -1

}

if (Image.GetBPP() == 32) //确认该图像包含Alpha通道

{

    int i

    int j

    for (i = 0 i < Image.GetWidth() i++)

    {

        for (j = 0 j < Image.GetHeight() j++)

        {

            byte *pByte = (byte *)Image.GetPixelAddress(i, j)

            pByte[0] = pByte[0] * pByte[3] / 255

            pByte[1] = pByte[1] * pByte[3] / 255

            pByte[2] = pByte[2] * pByte[3] / 255

        }

    }

}

Image.Draw(pDC->m_hDC, 0, 0)

Image.Destroy()

ReleaseDC(pDC)

注意使用CImage,对于带alpha通道数据的图片要特别处理一下,上面的示例中,双循环体就是做的这个事情,你可以参考。

#include <graphics.h>

#include <stdio.h>

int main()

{

int driver=0,mode=0

initgraph(&driver,&mode,"")

IMAGE img_1

loadimage(&img_1, _T("1.jpg"))

putimage(20, 20,&img_1)

getchar()

closegraph()

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11334360.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存