
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()
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)