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

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

?? wil.pas

?? 原版翎風(LF)引擎(M2)源碼(Delphi)
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
unit WIL;

interface

uses
  Windows, Classes, Graphics, SysUtils, DXDraws, DXClass, Dialogs,
  DirectX, DIB, wmUtil, HUtil32;

var
  g_boUseDIBSurface  :Boolean = FALSE;
  g_boWilNoCache     :Boolean = FALSE;
  g_n4CBCEC          :Integer = 20020;//4CBCEC
  g_n4CBCF0          :Integer = 20021;//4CBCF0
type
  TLibType = (ltLoadBmp, ltLoadMemory, ltLoadMunual, ltUseCache);


  TBmpImage = record
    Bmp           :TBitmap;
    dwLatestTime  :LongWord;
  end;
  pTBmpImage = ^TBmpImage;

   TBmpImageArr  = array[0..MaxListSize div 4] of TBmpImage;
   TDxImageArr   = array[0..MaxListSize div 4] of TDxImage;
   PTBmpImageArr = ^TBmpImageArr;
   PTDxImageArr  = ^TDxImageArr;

   TWMImages = class (TComponent)
   private
      FFileName: String;              //0x24
      FImageCount: integer;           //0x28
      FLibType: TLibType;             //0x2C
      FDxDraw: TDxDraw;               //0x30
      FDDraw: TDirectDraw;            //0x34
      FMaxMemorySize: integer;        //0x38
      btVersion:Byte;                 //0x3C
      m_bt458    :Byte;
      FAppr:Word;
      procedure LoadAllData;
      procedure LoadAllDataBmp;
      procedure LoadIndex (idxfile: string);
      procedure LoadDxImage (position: integer; pdximg: PTDxImage);
      procedure LoadBmpImage (position: integer; pbmpimg: PTBmpImage);
      procedure FreeOldMemorys;
      function  FGetImageSurface (index: integer): TDirectDrawSurface;
      procedure FSetDxDraw (fdd: TDxDraw);
      procedure FreeOldBmps;
      function  FGetImageBitmap (index: integer): TBitmap;
   protected
      //MemorySize: integer;      //0x3C      ?
      lsDib: TDib;              //0x40
      m_dwMemChecktTick: LongWord;   //0x44
   public
      m_ImgArr    :pTDxImageArr;     //0x48
      m_BmpArr    :pTBmpImageArr;    //0x4C
      m_IndexList :TList;         //0x50
      //BmpList: TList;
      m_FileStream: TFileStream;      //0x54
      //MainSurfacePalette: TDirectDrawPalette;
      MainPalette: TRgbQuads;
      constructor Create (AOwner: TComponent); override;
      destructor Destroy; override;

      procedure Initialize;
      procedure Finalize;
      procedure ClearCache;
      procedure LoadPalette;
      procedure FreeBitmap (index: integer);
      function  GetImage (index: integer; var px, py: integer): TDirectDrawSurface;
      function  GetCachedImage (index: integer; var px, py: integer): TDirectDrawSurface;
      function  GetCachedSurface (index: integer): TDirectDrawSurface;
      function  GetCachedBitmap (index: integer): TBitmap;
      procedure DrawZoom (paper: TCanvas; x, y, index: integer; zoom: Real);
      procedure DrawZoomEx (paper: TCanvas; x, y, index: integer; zoom: Real; leftzero: Boolean);
      property Images[index: integer]: TDirectDrawSurface read FGetImageSurface;
    	property Bitmaps[Index: Integer]: TBitmap read FGetImageBitmap;
      property DDraw: TDirectDraw read FDDraw write FDDraw;
   published
      property FileName: string read FFileName write FFileName;
      property ImageCount: integer read FImageCount;
      property DxDraw: TDxDraw read FDxDraw write FSetDxDraw;
      property LibType: TLibType read FLibType write FLibType;
      property MaxMemorySize: integer read FMaxMemorySize write FMaxMemorySize;
      property Appr:Word read FAppr write FAppr;
   end;

function TDXDrawRGBQuadsToPaletteEntries(const RGBQuads: TRGBQuads; AllowPalette256: Boolean): TPaletteEntries;

procedure Register;


implementation

//uses
//   ClMain;//記錄調試信息


procedure Register;
begin
   RegisterComponents('MirGame', [TWmImages]);
end;

constructor TWMImages.Create (AOwner: TComponent);
begin
   inherited Create (AOwner);
   FFileName := '';
   FLibType := ltLoadBmp;
   FImageCount := 0;
   //MemorySize := 0;//?
   FMaxMemorySize := 1024*1000; //1M

   FDDraw := nil;
   FDxDraw := nil;
   m_FileStream := nil;
   m_ImgArr := nil;
   m_BmpArr := nil;
   m_IndexList := TList.Create;
   lsDib := TDib.Create;
   lsDib.BitCount := 8;
   //BmpList := TList.Create;  //Bmp儈欄肺 葷儈且 錠鞏 葷儈

   m_dwMemChecktTick := GetTickCount;
   btVersion:=0;
   m_bt458:=0;   
end;

destructor TWMImages.Destroy;
begin
   m_IndexList.Free;
//   BmpList.Free;
   if m_FileStream <> nil then m_FileStream.Free;
   lsDib.Free;
   inherited Destroy;
end;

procedure TWMImages.Initialize;
var
  Idxfile: String;
  Header :TWMImageHeader;
begin
   if not (csDesigning in ComponentState) then begin
      if FFileName = '' then begin
         raise Exception.Create ('FileName not assigned..');
         exit;
      end;
      if (LibType <> ltLoadBmp) and (FDDraw = nil) then begin
         raise Exception.Create ('DDraw not assigned..');
         exit;
      end;
      if FileExists (FFileName) then begin
         if m_FileStream = nil then
            m_FileStream := TFileStream.Create (FFileName, fmOpenRead or fmShareDenyNone);
         m_FileStream.Read (Header, SizeOf(TWMImageHeader));
         {
         case m_bt458 of
           1: begin
             g_n4CBCEC:=20030;
             g_n4CBCF0:=20031;
           end;
           2: begin
             g_n4CBCEC:=20040;
             g_n4CBCF0:=20041;
           end;
           3: begin
             g_n4CBCEC:=20050;
             g_n4CBCF0:=20051;
           end;
         end;
         if (LongWord(g_n4CBCEC + Header.ImageCount) xor 3223982451) <> LongWord(Header.VerFlag) then begin
           btVersion:=1;
           m_FileStream.Seek(-4,soFromCurrent);
         end;
         }
         if header.VerFlag = 0 then begin
           btVersion:=1;
           m_FileStream.Seek(-4,soFromCurrent);
         end;

         FImageCount := Header.ImageCount;
         if LibType = ltLoadBmp then begin
            m_BmpArr := AllocMem (SizeOf(TBmpImage) * FImageCount);
            if m_BmpArr = nil then
               raise Exception.Create (self.Name + ' BmpArr = nil');
         end else begin
            m_ImgArr:=AllocMem(SizeOf(TDxImage) * FImageCount);
            if m_ImgArr = nil then
               raise Exception.Create (self.Name + ' ImgArr = nil');
         end;

         idxfile := ExtractFilePath(FFileName) + ExtractFileNameOnly(FFileName) + '.WIX';
         LoadPalette;
         if LibType = ltLoadMemory then
            LoadAllData
         else begin
            LoadIndex (idxfile);
         end;
      end else begin
//         MessageDlg (FFileName + ' Cannot find file.', mtWarning, [mbOk], 0);
      end;
   end;
end;

procedure TWMImages.Finalize;
var
   i: integer;
begin
   for i:=0 to FImageCount-1 do begin
      if m_ImgArr[i].Surface <> nil then begin
         m_ImgArr[i].Surface.Free;
         m_ImgArr[i].Surface := nil;
      end;
   end;
   if m_FileStream <> nil then begin
      m_FileStream.Free;
      m_FileStream := nil;
   end;
end;

function TDXDrawRGBQuadsToPaletteEntries(const RGBQuads: TRGBQuads;
  AllowPalette256: Boolean): TPaletteEntries;
var
  Entries: TPaletteEntries;
  dc: THandle;
  i: Integer;
begin
  Result := RGBQuadsToPaletteEntries(RGBQuads);

  if not AllowPalette256 then
  begin
    dc := GetDC(0);
    GetSystemPaletteEntries(dc, 0, 256, Entries);
    ReleaseDC(0, dc);

    for i:=0 to 9 do
      Result[i] := Entries[i];

    for i:=256 - 10 to 255 do
      Result[i] := Entries[i];
  end;

  for i:=0 to 255 do
    Result[i].peFlags := D3DPAL_READONLY;
end;

//Cache絕撈 茄波鍋俊 肺爹竊.
procedure TWMImages.LoadAllData;
var
   i: integer;
   imgi: TWMImageInfo;
   dib: TDIB;
   dximg: TDxImage;
begin
   dib := TDIB.Create;
   for i:=0 to FImageCount-1 do begin
   if btVersion <> 0 then m_FileStream.Read (imgi, sizeof(TWMImageInfo) - 4)
   else m_FileStream.Read (imgi, sizeof(TWMImageInfo));

      dib.Width := imgi.nWidth;
      dib.Height := imgi.nHeight;
      dib.ColorTable := MainPalette;
      dib.UpdatePalette;
      m_FileStream.Read (dib.PBits^, imgi.nWidth * imgi.nHeight);

      dximg.nPx := imgi.px;
      dximg.nPy := imgi.py;
      dximg.surface := TDirectDrawSurface.Create (FDDraw);
      dximg.surface.SystemMemory := TRUE;
      dximg.surface.SetSize (imgi.nWidth, imgi.nHeight);
      dximg.surface.Canvas.Draw (0, 0, dib);
      dximg.surface.Canvas.Release;
      dib.Clear; //FreeImage;

      dximg.surface.TransparentColor := 0;
      m_ImgArr[i] := dximg;
   end;
   dib.Free;
end;

procedure TWMImages.LoadPalette;
var
   Entries: TPaletteEntries;
begin
   if btVersion <> 0 then
     m_FileStream.Seek (sizeof(TWMImageHeader) - 4, 0)
   else
     m_FileStream.Seek (sizeof(TWMImageHeader), 0);
     
   m_FileStream.Read (MainPalette, sizeof(TRgbQuad) * 256); //

   //Entries := TDXDrawRGBQuadsToPaletteEntries (MainPalette, TRUE);
   //MainSurfacePalette := TDirectDrawPalette.Create (FDDraw);
   ////MainSurfacePalette.SetEntries(0, 256, Entries);
   //MainSurfacePalette.CreatePalette(DDPCAPS_8BIT, Entries);
end;

//Cache Bmp
procedure TWMImages.LoadAllDataBmp;
var
   i: integer;
   pbuf: PByte;
   imgi: TWMImageInfo;
   bmp: TBitmap;
begin
{   GetMem (pbuf, 1024*768);  //
   Stream.Seek (sizeof(TWMImageHeader), 0);
   Stream.Read (MainPalette, sizeof(TRgbQuad) * 256); //
   for i:=0 to ImageCount-1 do begin
      Stream.Read (imgi, sizeof(TWMImageInfo)-4);
      Stream.Read (pbuf^, imgi.Width * imgi.Height);
      bmp := MakeBmp (imgi.Width, imgi.Height, pbuf, MainPalette);
      BmpList.Add (bmp);     //BMP
   end;
   FreeMem (pbuf); }
end;

procedure TWMImages.LoadIndex (idxfile: string);
var
   fhandle, i, value: integer;
   header: TWMIndexHeader;
   pidx: PTWMIndexInfo;
   pvalue: PInteger;
begin
   m_IndexList.Clear;
   if FileExists (idxfile) then begin
      fhandle := FileOpen (idxfile, fmOpenRead or fmShareDenyNone);
      if fhandle > 0 then begin
         if btVersion <> 0 then
           FileRead (fhandle, header, sizeof(TWMIndexHeader) - 4)
         else
           FileRead (fhandle, header, sizeof(TWMIndexHeader));
           
         GetMem (pvalue, 4*header.IndexCount);
         FileRead (fhandle, pvalue^, 4*header.IndexCount);
         for i:=0 to header.IndexCount-1 do begin
            new (pidx);
            value := PInteger(integer(pvalue) + 4*i)^;
            m_IndexList.Add (pointer(value));
         end;
         FreeMem (pvalue);
         FileClose (fhandle);
      end;
   end;
end;

{----------------- Private Variables ---------------------}

function  TWMImages.FGetImageSurface (index: integer): TDirectDrawSurface;
begin
   Result := nil;
   if LibType = ltUseCache then begin
      Result := GetCachedSurface (index);
   end else
      if LibType = ltLoadMemory then begin
         if (index >= 0) and (index < ImageCount) then
            Result := m_ImgArr[index].Surface;
      end;
         
end;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
有坂深雪av一区二区精品| 91精品免费在线观看| 亚洲夂夂婷婷色拍ww47| 日韩一区二区在线观看| 成人免费福利片| 中文字幕中文乱码欧美一区二区 | 91片黄在线观看| 久久美女艺术照精彩视频福利播放 | 久久婷婷国产综合精品青草| 国产蜜臀av在线一区二区三区| 国产在线一区二区综合免费视频| 精品免费国产一区二区三区四区| 日韩高清不卡一区二区三区| 欧美日韩国产123区| 亚洲国产精品久久不卡毛片| 3d动漫精品啪啪一区二区竹菊 | 日韩亚洲欧美高清| 成人福利视频网站| 青青草原综合久久大伊人精品| 欧美日韩一区国产| 激情综合色播激情啊| 中文字幕欧美日韩一区| 欧美日韩专区在线| 丁香激情综合五月| 成人动漫中文字幕| 亚洲综合激情另类小说区| 色94色欧美sute亚洲线路二| 免费成人在线视频观看| 一区在线中文字幕| 国产精品久久久久影视| 6080午夜不卡| 色婷婷亚洲一区二区三区| 国产91丝袜在线18| 国产69精品久久久久毛片 | 亚洲一级二级在线| 婷婷久久综合九色国产成人 | 在线区一区二视频| 国产精品77777| 一区二区在线看| 91精品国产入口在线| 欧洲国内综合视频| 91啪九色porn原创视频在线观看| 国产成人av福利| 久草精品在线观看| 久久99国产精品免费| 亚洲一区中文日韩| 日韩中文字幕亚洲一区二区va在线| 国产精品99久久久| 成人av综合在线| 秋霞国产午夜精品免费视频| 婷婷激情综合网| 激情久久五月天| 白白色 亚洲乱淫| 精品99一区二区三区| 亚洲综合偷拍欧美一区色| 久久国内精品自在自线400部| 成人av资源网站| 精品免费一区二区三区| 精品99一区二区| 一区二区三区中文在线| 亚洲图片有声小说| 国产精品小仙女| 国产亚洲一区二区三区四区| 91精品国产麻豆| 精品久久久久久久人人人人传媒 | 一区二区三区欧美视频| 性做久久久久久久免费看| 国内精品视频一区二区三区八戒| 国产成人精品一区二区三区网站观看| 丰满岳乱妇一区二区三区| 色久优优欧美色久优优| 日韩一区在线播放| 国产亚洲va综合人人澡精品| 亚洲色欲色欲www| 国产一区激情在线| 欧美在线制服丝袜| 中文字幕 久热精品 视频在线 | 国产精品女同互慰在线看| 亚洲成人免费av| 91免费在线视频观看| 国产亚洲综合色| 裸体一区二区三区| 在线播放国产精品二区一二区四区| 国产女同性恋一区二区| 九一九一国产精品| 日韩丝袜美女视频| 久久99久久久欧美国产| 国产成人精品网址| 91精品国产日韩91久久久久久| 亚洲国产一区视频| 国产综合成人久久大片91| www.激情成人| 91精品国产免费久久综合| 日韩一区二区电影在线| xnxx国产精品| 一卡二卡三卡日韩欧美| 国产美女久久久久| 在线观看日韩av先锋影音电影院| 日韩福利视频网| 毛片一区二区三区| 婷婷中文字幕综合| 免费在线观看视频一区| 日本不卡在线视频| 91精品国产色综合久久ai换脸 | 亚洲最大色网站| 蜜桃av一区二区三区电影| 欧美图区在线视频| 国产精品系列在线| 亚洲图片自拍偷拍| 成人国产视频在线观看| 欧美va日韩va| 免费在线看成人av| 欧美电视剧免费全集观看| 久久99日本精品| 久久蜜臀精品av| 91麻豆福利精品推荐| 亚洲欧美日韩国产手机在线 | 久久久久99精品一区| 国产在线精品一区二区| 欧美激情一区二区三区全黄| 亚洲天堂精品在线观看| 亚洲一区二区av在线| 久久久噜噜噜久久人人看| 国模无码大尺度一区二区三区| 亚洲综合自拍偷拍| 一区二区在线电影| 91精品婷婷国产综合久久性色| 成人污视频在线观看| 日韩av高清在线观看| 亚洲精品国产a久久久久久 | 国产呦萝稀缺另类资源| 中文字幕亚洲一区二区av在线| 26uuu亚洲| 欧美一区二区三区在线观看 | 亚洲精品一区二区三区蜜桃下载| 在线视频你懂得一区| www..com久久爱| 懂色av中文字幕一区二区三区| 日本午夜一区二区| 午夜精品久久久久| 亚洲国产毛片aaaaa无费看| 成人免费视频在线观看| 国产精品天天看| 欧美经典一区二区| 国产欧美一二三区| 中文成人综合网| 亚洲精品免费播放| 亚洲综合清纯丝袜自拍| 亚洲欧美日韩一区| 一区二区三区加勒比av| 亚洲国产精品久久人人爱| 五月天婷婷综合| 97精品国产露脸对白| 欧美午夜精品久久久久久孕妇| 99re这里都是精品| 欧美性生活一区| 日韩欧美国产综合| 久久久久久久久久电影| 国产女人18毛片水真多成人如厕| 中文字幕一区二区三区在线播放 | 国产欧美日产一区| 亚洲男女一区二区三区| 蜜桃精品在线观看| 成人免费视频一区二区| 91黄色在线观看| 精品日韩一区二区三区| 自拍视频在线观看一区二区| 日韩和欧美的一区| 成人一区二区视频| 日韩一级片网址| 一区二区三区.www| 日本亚洲视频在线| 成人性生交大片免费看视频在线| 欧美日韩中字一区| 国产精品日韩精品欧美在线| 午夜精品福利一区二区三区蜜桃| 丁香激情综合国产| 91精品国产福利| 亚洲国产美国国产综合一区二区| 国产成人啪午夜精品网站男同| 欧美二区在线观看| 亚洲激情校园春色| 波多野结衣亚洲一区| 久久伊人蜜桃av一区二区| 丝袜诱惑制服诱惑色一区在线观看| 粉嫩aⅴ一区二区三区四区 | 久久品道一品道久久精品| 亚洲激情图片小说视频| 91亚洲大成网污www| 欧美极品另类videosde| 国产乱子伦视频一区二区三区| 精品伦理精品一区| 美脚の诱脚舐め脚责91| 日韩精品一区二区三区在线播放| 天天色图综合网| 日韩免费视频一区二区| 免费亚洲电影在线| 日韩手机在线导航| 大桥未久av一区二区三区中文| 久久久精品蜜桃|