|
|
加载GIF,JPG到Surface
By: W-Buffer译:ZH1110
这非常简单,我们不需要某种编码器去取得JPG数据,或类似的东西。我们只要用一个StdPicture类加载图片,然后传递到 Surface, 但是首先我们需要声明下面 API 函数:
Public Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Public Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Public Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Public Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Public Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
我们需要一些东西加载图片:
Dim Pict1 As StdPicture
Set Pict1 = LoadPicture("MyPict.jpg")
现在创建surface:
Dim TDesc As DDSurfaceDesc2
TDesc.lFlags = DDSD_CAPS Or DDSD_HEIGHT Or DDSD_WIDTH
TDesc.ddsCaps.lCaps = DDSCAPS_OFFSCREENPLAIN
TDesc.lHeight = CLng((Pict1.Height * 0.001) * 567 / Screen.TwipsPerPixelY)
TDesc.lWidth = CLng((TPict.Width * 0.001) * 567 / Screen.TwipsPerPixelX)
Set Surf = DDraw.CreateSurface(TDesc)
Dim SurfDC As Long, PictDC As Long
SurfDC = Surf.GetDC
PictDC = CreateCompatibleDC(0)
SelectObject Pict1.Handle, PictDC
现在我们直接用BitBlt或StretchBlt拷贝Pict1到Surf :
仅拷贝相同尺寸:
BitBlt SurfDC, 0, 0, TDesc.lWidth, TDesc.lHeight, PictDC, 0, 0, vbSrcCopy
拷贝拉升图片:
StretchBlt SurfDC, 0, 0, StretchWidth, StretchHeight, PictDC, 0, 0, TDesc.lWidth, TDesc.lWidth, vbSrcCopy
释放 DCs:
Surf.ReleaseDC SurfDC
DelecteDC PictDC
Set Pict1 = Nothing
下一步? 下载 SurfUtil.Bas -这样你也会了这个技术!
注:有时StretchBlt 不能正确显示GIFs, 这就是为什么我加入了BitBlt 操作.
|
|