|
|
|
加载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
我们需要一些东西加载图片:
现在创建surface: 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
现在我们直接用BitBlt或StretchBlt拷贝Pict1到Surf : 仅拷贝相同尺寸: 拷贝拉升图片: DelecteDC PictDC Set Pict1 = Nothing 下一步? 下载 SurfUtil.Bas -这样你也会了这个技术! 注:有时StretchBlt 不能正确显示GIFs, 这就是为什么我加入了BitBlt 操作. |