亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ddutil.pas

?? ACKAGE INSTALL =============== NOTE: if you get an error when installing TVideoGrabber on the
?? PAS
字號:
//-----------------------------------------------------------------------------
// File: ddutil.pas
//
// Desc: Routines for loading bitmap and palettes from resources
//
//
// Copyright (c) 1995-1999 Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
// Conversion: Rolf Meyerhoff, meyerhoff@earthling.net
//-----------------------------------------------------------------------------
unit ddutil;

interface

//-----------------------------------------------------------------------------
// Include files
//-----------------------------------------------------------------------------
uses
  Windows, DirectDraw;

function DDLoadBitmap(pdd : IDirectDraw7; szBitmap : PChar; dx, dy : Integer) : IDirectDrawSurface7;
function DDReLoadBitmap(pdds : IDirectDrawSurface7; szBitmap : PChar) : HRESULT;
function DDCopyBitmap(pdds : IDirectDrawSurface7; hbm : HBITMAP; x, y, dx, dy : Integer) : HRESULT;
function DDLoadPalette(pdd : IDirectDraw7; szBitmap : PChar) : IDirectDrawPalette;
function DDColorMatch(pdds : IDirectDrawSurface7; rgb : COLORREF) : DWORD;
function DDSetColorKey(pdds : IDirectDrawSurface7; rgb : COLORREF) : HRESULT;

type
  PRGBQUAD =  ^RGBQUAD;
  PDWORD = ^DWORD;

implementation

//-----------------------------------------------------------------------------
// Name: DDLoadBitmap()
// Desc: Create a DirectDrawSurface from a bitmap resource.
//-----------------------------------------------------------------------------
function DDLoadBitmap(pdd : IDirectDraw7; szBitmap : PChar; dx, dy : Integer) : IDirectDrawSurface7;
var
  hbm : HBITMAP;
  bm : BITMAP;
  ddsd : TDDSurfaceDesc2;
  pdds : IDirectDrawSurface7;
begin
  //
  //  Try to load the bitmap as a resource, if that fails, try it as a file
  //
  hbm := LoadImage(GetModuleHandle(nil), szBitmap, IMAGE_BITMAP, dx, dy, LR_CREATEDIBSECTION);
  if hbm = 0 then
    begin
      hbm := LoadImage(0, szBitmap, IMAGE_BITMAP, dx, dy, LR_LOADFROMFILE or LR_CREATEDIBSECTION);
    end;
  if hbm = 0 then
    begin
      Result := nil;
      Exit;
    end;
  //
  // Get size of the bitmap
  //
  GetObject(hbm, SizeOf(bm), @bm);
  //
  // Create a DirectDrawSurface for this bitmap
  //
  FillChar(ddsd, SizeOf(ddsd), 0);
  ddsd.dwSize := SizeOf(ddsd);
  ddsd.dwFlags := DDSD_CAPS or DDSD_HEIGHT or DDSD_WIDTH;
  ddsd.ddsCaps.dwCaps := DDSCAPS_OFFSCREENPLAIN;
  ddsd.dwWidth := bm.bmWidth;
  ddsd.dwHeight := bm.bmHeight;
  if pdd.CreateSurface(ddsd, pdds, nil) <> DD_OK then
    begin
      Result := nil;
      Exit;
    end;
  DDCopyBitmap(pdds, hbm, 0, 0, 0, 0);
  DeleteObject(hbm);
  Result := pdds;
end;

//-----------------------------------------------------------------------------
// Name: DDReLoadBitmap()
// Desc: Load a bitmap from a file or resource into a directdraw surface.
//       normaly used to re-load a surface after a restore.
//-----------------------------------------------------------------------------
function DDReLoadBitmap(pdds : IDirectDrawSurface7; szBitmap : PChar) : HRESULT;
var
  hbm : HBITMAP;
  hr : HRESULT;
begin
  //
  //  Try to load the bitmap as a resource, if that fails, try it as a file
  //
  hbm := LoadImage(GetModuleHandle(nil), szBitmap, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
  if hbm = 0 then
    begin
      hbm := LoadImage(0, szBitmap, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE or LR_CREATEDIBSECTION);
    end;
  if hbm = 0 then
    begin
      OutputDebugString('handle is null');
      Result := E_FAIL;
      Exit;
    end;
  hr := DDCopyBitmap(pdds, hbm, 0, 0, 0, 0);
  if hr <> DD_OK then
    begin
      OutputDebugString('ddcopybitmap failed');
      Result := hr;
      Exit;
    end;
  DeleteObject(hbm);
  Result := hr;
end;

//-----------------------------------------------------------------------------
// Name: DDCopyBitmap()
// Desc: Draw a bitmap into a DirectDrawSurface
//-----------------------------------------------------------------------------
function DDCopyBitmap(pdds : IDirectDrawSurface7; hbm : HBITMAP; x, y, dx, dy : Integer) : HRESULT;
var
 hdcImage : HDC;
 h_dc : HDC;
 bm : BITMAP;
 ddsd : TDDSurfaceDesc2;
 hr : HRESULT;
begin
  if (hbm = 0) or (pdds = nil) then
    begin
      Result := E_FAIL;
      Exit;
    end;
  //
  // Make sure this surface is restored.
  //
  pdds._Restore;
  //
  // Select bitmap into a memoryDC so we can use it.
  //
  hdcImage := CreateCompatibleDC(0);
  if hdcImage = 0 then
    begin
      OutputDebugString('createcompatible dc failed');
    end;
  SelectObject(hdcImage, hbm);
  //
  // Get size of the bitmap
  //
  GetObject(hbm, sizeof(bm), @bm);
  if dx = 0 then                      // Use the passed size, unless zero
    begin
      dx := bm.bmWidth;
    end;
  if dy = 0 then
    begin
      dy := bm.bmHeight;
    end;
  //
  // Get size of surface.
  //
  ddsd.dwSize := SizeOf(ddsd);
  ddsd.dwFlags := DDSD_HEIGHT or DDSD_WIDTH;
  pdds.GetSurfaceDesc(ddsd);

  hr := pdds.GetDC(h_dc);
  if hr = DD_OK then
    begin
      StretchBlt(h_dc, 0, 0, ddsd.dwWidth, ddsd.dwHeight, hdcImage, x, y, dx, dy, SRCCOPY);
      pdds.ReleaseDC(h_dc);
    end;
  DeleteDC(hdcImage);
  Result := hr;
end;

//-----------------------------------------------------------------------------
// Name: DDLoadPalette()
// Desc: Create a DirectDraw palette object from a bitmap resource
//       if the resource does not exist or NULL is passed create a
//       default 332 palette.
//-----------------------------------------------------------------------------
function DDLoadPalette(pdd : IDirectDraw7; szBitmap : PChar) : IDirectDrawPalette;
var
  ddpal : IDirectDrawPalette;
  i : Integer;
  n : Integer;
  fh : Integer;
  h : HRSRC;
  lpbi : ^BITMAPINFOHEADER;
  ape : array[0..255] of PALETTEENTRY;
  prgb : PRGBQUAD;
  bf : BITMAPFILEHEADER;
  bi : BITMAPINFOHEADER;
  r : Byte;
begin
  //
  // Build a 332 palette as the default.
  //
  for i := 0 to 255 do
    begin
      ape[i].peRed := ((i shr 5) and $07) * 255 div 7;
      ape[i].peGreen := ((i shr 2) and $07) * 255 div 7;
      ape[i].peBlue := ((i shr 0) and $03) * 255 div 3;
      ape[i].peFlags := 0;
    end;
  //
  // Get a pointer to the bitmap resource.
  //
  h := FindResource(0, szBitmap, RT_BITMAP);
  if (szBitmap <> nil) and (h <> 0) then
    begin
      lpbi := LockResource(LoadResource(0, h));
      if lpbi = nil then
        OutputDebugString('lock resource failed');
      inc(lpbi, lpbi^.biSize);
      prgb := PRGBQUAD(lpbi);
      if (lpbi = nil) or (lpbi^.biSize < SizeOf(BITMAPINFOHEADER)) then
        n := 0
      else if lpbi^.biBitCount > 8 then
        n := 0
      else if lpbi^.biClrUsed = 0 then
        n := 1 shl lpbi^.biBitCount
      else
        n := lpbi^.biClrUsed;
      //
      //  A DIB color table has its colors stored BGR not RGB
      //  so flip them around.
      //
      for i := 0 to n-1 do
        begin
          ape[i].peRed := prgb^.rgbRed;
          ape[i].peGreen := prgb^.rgbGreen;
          ape[i].peBlue := prgb^.rgbBlue;
          ape[i].peFlags := 0;
          inc(prgb);
        end;
    end
  else
    begin
      fh := _lopen(szBitmap, OF_READ);
      if (szBitmap <> nil) and (fh <> -1) then
        begin
          _lread(fh, @bf, SizeOf(bf));
          _lread(fh, @bi, SizeOf(bi));
          _lread(fh, @ape[0], SizeOf(ape));
          _lclose(fh);
          if bi.biSize <> SizeOf(BITMAPINFOHEADER) then
            n := 0
          else if bi.biBitCount > 8 then
            n := 0
          else if bi.biClrUsed = 0 then
            n := 1 shl bi.biBitCount
          else
            n := bi.biClrUsed;
          //
          //  A DIB color table has its colors stored BGR not RGB
          //  so flip them around.
          //
          for i := 0 to n - 1 do
            begin
            r := ape[i].peRed;
            ape[i].peRed := ape[i].peBlue;
            ape[i].peBlue := r;
            end;
        end;
    end;
  pdd.CreatePalette(DDPCAPS_8BIT, @ape[0], ddpal, nil);
  Result := ddpal;
end;

//-----------------------------------------------------------------------------
// Name: DDColorMatch()
// Desc: Convert a RGB color to a pysical color.
//       We do this by leting GDI SetPixel() do the color matching
//       then we lock the memory and see what it got mapped to.
//-----------------------------------------------------------------------------
function DDColorMatch(pdds : IDirectDrawSurface7; rgb : COLORREF) : DWORD;
var
  rgbT : COLORREF;
  h_dc : HDC;
  dw : DWORD;
  ddsd : TDDSurfaceDesc2;
  hres : HRESULT;
begin
  dw := CLR_INVALID;
  rgbT := 0;
  //
  //  Use GDI SetPixel to color match for us
  //
  if (rgb <> CLR_INVALID) and (pdds.GetDC(h_dc) = DD_OK) then
    begin
      rgbT := GetPixel(h_dc, 0, 0);     // Save current pixel value
      SetPixel(h_dc, 0, 0, rgb);       // Set our value
      pdds.ReleaseDC(h_dc);
    end;
  //
  // Now lock the surface so we can read back the converted color
  //
  ddsd.dwSize := SizeOf(ddsd);
  hres := pdds.Lock(nil, ddsd, 0, 0);
  while hres = DDERR_WASSTILLDRAWING do
    begin
      hres := pdds.Lock(nil, ddsd, 0, 0);
    end;
  if hres = DD_OK then
    begin
      dw := PDWORD(ddsd.lpSurface)^;                 // Get DWORD
      if ddsd.ddpfPixelFormat.dwRGBBitCount < 32 then
        dw := dw and ((1 shl ddsd.ddpfPixelFormat.dwRGBBitCount) - 1);  // Mask it to bpp
      pdds.Unlock(nil);
    end;
  //
  //  Now put the color that was there back.
  //
  if (rgb <> CLR_INVALID) and (pdds.GetDC(h_dc) = DD_OK) then
    begin
      SetPixel(h_dc, 0, 0, rgbT);
      pdds.ReleaseDC(h_dc);
    end;
  Result := dw;
end;

//-----------------------------------------------------------------------------
// Name: DDSetColorKey()
// Desc: Set a color key for a surface, given a RGB.
//       If you pass CLR_INVALID as the color key, the pixel
//       in the upper-left corner will be used.
//-----------------------------------------------------------------------------
function DDSetColorKey(pdds : IDirectDrawSurface7; rgb : COLORREF) : HRESULT;
var
  ddck : TDDColorKey;
begin
  ddck.dwColorSpaceLowValue := DDColorMatch(pdds, rgb);
  ddck.dwColorSpaceHighValue := ddck.dwColorSpaceLowValue;
  Result := pdds.SetColorKey(DDCKEY_SRCBLT, @ddck);
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲另类色综合网站| 国产成人综合在线| 国产一区二区三区免费播放| 色婷婷精品大在线视频| 欧美成人一区二区三区片免费 | 777午夜精品免费视频| 日本电影亚洲天堂一区| 色狠狠综合天天综合综合| 99热精品国产| 色一情一乱一乱一91av| 欧美在线视频日韩| 欧美一区二区三区在线| 精品日产卡一卡二卡麻豆| 精品播放一区二区| 国产三级久久久| 亚洲女人的天堂| 日韩精品一二区| 国产在线一区二区综合免费视频| 国产在线视频一区二区三区| 成人黄色大片在线观看| 日本在线不卡视频| 成人免费高清视频| 中文字幕免费在线观看视频一区| 精品一区二区在线视频| 欧美一区二区免费视频| 日日夜夜精品免费视频| 欧美日韩在线三级| 亚洲福利视频导航| 欧美美女bb生活片| 日本成人在线视频网站| 欧美绝品在线观看成人午夜影视| 亚洲综合一区二区三区| 欧美三级电影网| 亚洲午夜日本在线观看| 欧美人动与zoxxxx乱| 视频一区在线视频| 91精品国产麻豆| 精品无人码麻豆乱码1区2区| 精品国产乱码久久久久久蜜臀| 久久精品二区亚洲w码| 欧美精品一区二区三区在线播放| 精品亚洲成a人在线观看| 亚洲综合激情小说| 欧美性感一区二区三区| 丝袜美腿一区二区三区| 欧美一区午夜精品| 国内外成人在线视频| 国产欧美日韩在线观看| 成人国产精品免费观看| 亚洲大片精品永久免费| 欧美一区二区视频观看视频| 九九在线精品视频| 国产精品久久久久影院| 欧美在线高清视频| 极品少妇一区二区三区精品视频| 国产欧美精品一区aⅴ影院 | 色久综合一二码| 五月天激情小说综合| 欧美成人官网二区| av一二三不卡影片| 日韩电影在线观看一区| 国产亚洲人成网站| 欧美亚洲禁片免费| 国产精品1区二区.| 亚洲成人动漫在线观看| 久久久久久久久免费| 91浏览器入口在线观看| 麻豆精品蜜桃视频网站| 最新国产成人在线观看| 日韩你懂的在线观看| 色婷婷综合五月| 韩国理伦片一区二区三区在线播放 | 91黄视频在线| 久久精品99国产精品| 国产精品入口麻豆九色| 91精品国产91久久久久久最新毛片| 国产精品1区2区3区在线观看| 国产伦理精品不卡| 亚洲成人自拍网| 国产精品你懂的| 日韩欧美中文一区二区| 不卡av电影在线播放| 美国十次综合导航| 亚洲精品va在线观看| 国产欧美一区二区精品婷婷| 欧美三级视频在线观看| 97久久超碰国产精品电影| 久久国产三级精品| 亚洲亚洲人成综合网络| 中文字幕日本乱码精品影院| 精品国产精品一区二区夜夜嗨| 欧美视频一区二区三区| 91在线丨porny丨国产| 国产91精品在线观看| 美腿丝袜亚洲综合| 亚洲国产精品精华液网站| 国产精品成人一区二区三区夜夜夜| 欧美大片在线观看一区| 884aa四虎影成人精品一区| 日韩一级大片在线| 国产成人在线视频网站| 亚洲日本青草视频在线怡红院 | 一个色妞综合视频在线观看| 欧美日韩一级片在线观看| 日本不卡一二三区黄网| 亚洲国产精华液网站w| 在线免费观看不卡av| 玖玖九九国产精品| 中文字幕在线不卡| 56国语精品自产拍在线观看| 岛国精品在线播放| 天天操天天色综合| 国产精品久久综合| 日韩三级在线观看| 99久久99久久精品国产片果冻| 日韩在线播放一区二区| 久久众筹精品私拍模特| 欧美性生活一区| 国产.欧美.日韩| 男女性色大片免费观看一区二区| 国产精品天干天干在线综合| 欧美高清视频在线高清观看mv色露露十八| 激情欧美一区二区| 亚洲高清不卡在线| 久久这里都是精品| 欧美性xxxxxxxx| 99精品视频中文字幕| 精品一区二区在线免费观看| 亚洲日本在线视频观看| 精品久久久久久综合日本欧美| 欧美三级韩国三级日本一级| 成人精品鲁一区一区二区| 久草热8精品视频在线观看| 亚洲成av人影院在线观看网| 亚洲人成7777| 国产精品水嫩水嫩| 久久先锋影音av鲁色资源网| 欧美一区二区三区婷婷月色| 精品1区2区3区| 在线影视一区二区三区| 国产91精品入口| 国产毛片精品国产一区二区三区| 蜜桃精品在线观看| 午夜私人影院久久久久| 亚洲综合色噜噜狠狠| 一区二区三区四区亚洲| 亚洲色图制服诱惑 | 日韩一级二级三级精品视频| 精品视频在线免费| 欧美三级日韩三级国产三级| 在线观看视频一区二区| 在线观看国产91| 91精彩视频在线观看| 在线观看亚洲一区| 欧美日韩综合在线| 欧美日韩美少妇| 欧美日韩精品一区二区三区四区 | 欧美aaa在线| 美腿丝袜亚洲一区| 精品一区二区国语对白| 国产高清不卡二三区| 成人在线视频一区二区| 99免费精品视频| 首页综合国产亚洲丝袜| 国产成人亚洲综合a∨婷婷| 欧美丰满一区二区免费视频| 国产精品素人视频| 麻豆成人在线观看| 欧美日韩中文字幕一区二区| 中文字幕av不卡| 精品在线亚洲视频| 欧美精品在线一区二区三区| 中文字幕一区二区三区av| 黄网站免费久久| 欧美丰满一区二区免费视频| 亚洲欧美色图小说| 国产成人免费视频| 欧美精品一区二区三| 天堂久久一区二区三区| 色久综合一二码| 17c精品麻豆一区二区免费| 国产乱码精品一品二品| 欧美一级艳片视频免费观看| 亚洲综合小说图片| 日本二三区不卡| 亚洲免费av网站| 不卡视频在线看| 国产欧美一区二区精品仙草咪| 欧美日韩精品欧美日韩精品一| 国产精品久久久久一区二区三区| 国产在线麻豆精品观看| 日韩天堂在线观看| 免费人成网站在线观看欧美高清| 欧美日本在线观看| 天堂av在线一区| 欧美日韩国产一区二区三区地区| 亚洲一区二区成人在线观看| 91高清在线观看| 亚洲已满18点击进入久久| 色诱视频网站一区|