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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? bitmapregion.~pas

?? 小程序 可以任意的拖動(dòng) 會(huì)找到一定的水平線 右擊退出即可
?? ~PAS
字號(hào):
Unit bitmapregion;

Interface
Uses math, windows;

Function BitmapToRegion(hBmp: HBITMAP; cTransparentColor: COLORREF = 0;
  cTolerance: COLORREF = $101010): HRGN;

Implementation

Function BitmapToRegion(hBmp: HBITMAP; cTransparentColor: COLORREF = 0;
  cTolerance: COLORREF = $101010): HRGN;
Const
  AllocUnit         = 100;
  MaxRects          : DWORD = AllocUnit;
Type
  TRectArray = Array[0..0] Of TRect;
  LONG = LongInt;
  PLONG = ^LONG;
Var
  h, Rgn            : HRGN;
  hMemDC, h_DC      : HDC;
  hBmp32, HoldBmp   : HBITMAP;
  bm, bm32          : BITMAP;
  RGB32BITSBITMAPINFO: BITMAPINFOHEADER;
  BITMAP_INFO       : ^BITMAPINFO;
  pbBits32          : pointer;
  hData             : THandle;
  pData             : PRgnData;
  lr, lg, lb, hr, hg, hb: Byte;
  b                 : Byte;
  p32               : PByte;
  p                 : PLONG;
  x, y, x0          : Integer;
  pr                : ^TRectArray;
Begin
  Rgn := 0;

  { Create a memory DC inside which we will scan the bitmap content }
  hMemDC := CreateCompatibleDC(0);
  If hMemDC > 0 Then
  Begin
    { get Bitmap size }
    GetObject(hBmp, SizeOf(bm), @bm);

    { Create a 32-bit depth bitmap and select it into the memory DC }
    With RGB32BITSBITMAPINFO Do
    Begin
      biSize := sizeof(BITMAPINFOHEADER); // biSize
      biWidth := bm.bmWidth;            // biWidth;
      biHeight := bm.bmHeight;          // biHeight;
      biPlanes := 1;                    // biPlanes;
      biBitCount := 32;                 // biBitCount
      biCompression := BI_RGB;          // biCompression;
      biSizeImage := 0;                 // biSizeImage;
      biXPelsPerMeter := 0;             // biXPelsPerMeter;
      biYPelsPerMeter := 0;             // biYPelsPerMeter;
      biClrUsed := 0;                   // biClrUsed;
      biClrImportant := 0;              // biClrImportant;
    End;
    BITMAP_INFO := @RGB32BITSBITMAPINFO; // points to the previous structure

    hBmp32 := CreateDIBSection(hMemDC, BITMAP_INFO^, DIB_RGB_COLORS,
      pbBits32, 0, 0);
    If hBmp32 > 0 Then
    Begin
      HoldBmp := SelectObject(hMemDC, hBmp32);

      { Create DC just to copy bitmap into the memory DC }
      h_DC := CreateCompatibleDC(hMemDC);
      If h_DC > 0 Then
      Begin
        { Get how many bytes per row we have for the bitmap bits (rounded up
        to 32 bits) }
        GetObject(hBmp32, SizeOf(bm32), @bm32);
        While (bm32.bmWidthBytes Mod 4 <> 0) Do
          Inc(bm32.bmWidthBytes);

        { Copy the bitmap into the memory DC }
        HoldBmp := SelectObject(h_DC, hBmp);
        BitBlt(hMemDC, 0, 0, bm.bmWidth, bm.bmHeight, h_DC, 0, 0, SRCCOPY);

        { For better performance, we will use the ExtCreateRegion() function
        to create the region. This function take a RGNDATA structure on
        entry. We will add rectangles by amount of ALLOC_UNIT number in this
        structure. }
       // MaxRects := AllocUnit;
        hData := GlobalAlloc(GMEM_MOVEABLE, SizeOf(RGNDATAHEADER) +
          (SizeOf(TRect) * maxRects));
        pData := GlobalLock(hData);
        With pData^.rdh Do
        Begin
          dwSize := SizeOf(RGNDATAHEADER);
          iType := RDH_RECTANGLES;
          nCount := 0;
          nRgnSize := 0;
          SetRect(rcBound, MAXLONG, MAXLONG, 0, 0);
        End;

        { Keep on hand highest and lowest values for the "transparent"
        pixels }
        lr := GetRValue(cTransparentColor);
        lg := GetGValue(cTransparentColor);
        lb := GetBValue(cTransparentColor);
        hr := Min($FF, lr + GetRValue(cTolerance));
        hg := Min($FF, lg + GetGValue(cTolerance));
        hb := Min($FF, lb + GetBValue(cTolerance));

        { Scan each bitmap row from bottom to top (the bitmap is inverted
        vertically) }
        p32 := PByte(Integer(bm32.bmBits) + (bm32.bmHeight - 1) *
          bm32.bmWidthBytes);
        For y := 0 To bm.bmHeight - 1 Do
        Begin
          { Scan each bitmap pixel from left to right }
          // for x := 0 to bm.bmWidth - 1 do
          x := 0;
          While x < bm.bmWidth Do
          Begin
            { Search for a continuos range of "non transparent pixels" }
            x0 := x;
            p := PLONG(Integer(p32) + x * SizeOf(LONG));
            While x < bm.bmWidth Do
            Begin
              b := GetRValue(p^);
              If (b >= lr) And (b <= hr) Then
              Begin
                b := GetGValue(p^);
                If (b >= lg) And (b <= hg) Then
                Begin
                  b := GetBValue(p^);
                  If (b >= lb) And (b <= hb) Then
                  Begin
                    Break;              // this pixel is transparent
                  End;
                End;
              End;
              inc(p);
              inc(x);
            End;                        // while x < bm.bmWidth

            If x > x0 Then
            Begin
              { Add the pixels (x0, y) to (x, y+1) as a new rectangle in
              the region }
              If pData^.rdh.nCount >= maxRects Then
              Begin
                GlobalUnlock(hData);
               // Inc(maxRects, AllocUnit);
                hData := GlobalReAlloc(hData, SizeOf(RGNDATAHEADER) +
                  (SizeOf(TRect) * MaxRects), GMEM_MOVEABLE);
                pData := GlobalLock(hData);
              End;

              pr := @pData^.Buffer;
              SetRect(pr^[pData^.rdh.nCount], x0, y, x, y + 1);
              With pData^.rdh Do
              Begin
                If x0 < rcBound.Left Then rcBound.Left := x0;
                If y < rcBound.Top Then rcBound.Top := y;
                If x > rcBound.Right Then rcBound.Right := x;
                If y + 1 > rcBound.Bottom Then rcBound.Bottom := y + 1;
                Inc(nCount);
              End;
            End;

            { On Windows98, ExtCreateRegion() may fail if the number of
            rectangles is too large (ie: > 4000). Therefore, we have to
            create the region by multiple steps. }
            If pData^.rdh.nCount = 2000 Then
            Begin
              h := ExtCreateRegion(Nil, SizeOf(RGNDATAHEADER) +
                (SizeOf(TRect) * maxRects), pData^);
              If Rgn > 0 Then
              Begin
                CombineRgn(Rgn, Rgn, h, RGN_OR);
                DeleteObject(h);
              End
              Else
                Rgn := h;
              pData^.rdh.nCount := 0;
              SetRect(pData^.rdh.rcBound, MAXLONG, MAXLONG, 0, 0);
            End;

            Inc(x);
          End; { for x := 0 to bm.Width - 1 (used a While loop to be able
          to make Inc(x);) }
          { Go to next row (remember, the bitmap is inverted vertically) }
          Dec(p32, bm32.bmWidthBytes);
        End;                            // for y := 0 to bm.Height - 1

        { Create or extend the region with the remaining rectangles }
        h := ExtCreateRegion(Nil, SizeOf(RGNDATAHEADER) + (SizeOf(TRect) *
          MaxRects), pData^);
        If Rgn > 0 Then
        Begin
          CombineRgn(Rgn, Rgn, h, RGN_OR);
          DeleteObject(h);
        End
        Else
          Rgn := h;

        GlobalFree(hData);
        SelectObject(h_DC, holdBmp);
        DeleteDC(h_DC);
      End;                              // if h_DC > 0
      DeleteObject(SelectObject(hMemDC, holdBmp));
    End;                                // if hBmp32 > 0
    DeleteObject(hMemDC);
  End;                                  // if hMemDC > 0
  Result := Rgn;
End;

End.

 

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲人亚洲人成电影网站色| 亚洲色图丝袜美腿| 激情综合色丁香一区二区| 中文字幕高清不卡| 亚洲成人一二三| 午夜精品在线视频一区| 亚洲成a人片在线观看中文| 久久精品视频免费观看| 1000精品久久久久久久久| 亚洲欧美日韩国产中文在线| 最新欧美精品一区二区三区| 亚洲激情成人在线| 亚洲aaa精品| 国内精品伊人久久久久av影院| 无码av免费一区二区三区试看 | 麻豆精品一区二区av白丝在线| 奇米777欧美一区二区| 国产精华液一区二区三区| 欧美日韩黄色一区二区| 国产日韩三级在线| 蜜芽一区二区三区| 91国偷自产一区二区三区成为亚洲经典 | 一区二区欧美在线观看| 精品一区二区三区久久| 国产精品高潮呻吟| 国产美女精品一区二区三区| 欧美性感一区二区三区| 亚洲亚洲精品在线观看| 不卡电影一区二区三区| 国产精品美女久久久久久久久久久 | 亚洲男同1069视频| 丝袜亚洲精品中文字幕一区| 丰满少妇在线播放bd日韩电影| 色哟哟亚洲精品| 日韩毛片视频在线看| 国产成人午夜精品5599| 国产精品久久久久影院老司 | 欧美天堂一区二区三区| 欧美日韩美女一区二区| 91免费观看视频在线| 夜夜揉揉日日人人青青一国产精品| 国产91高潮流白浆在线麻豆 | 91最新地址在线播放| 亚洲欧洲国产日本综合| 91精品国产综合久久久久久久 | 国产酒店精品激情| 亚洲另类色综合网站| 日韩欧美国产一区二区在线播放| 天堂蜜桃91精品| 中文欧美字幕免费| 欧美美女直播网站| 丁香六月久久综合狠狠色| 天堂影院一区二区| 成人免费一区二区三区在线观看| 一本一本久久a久久精品综合麻豆| 日本人妖一区二区| 亚洲国产精品久久一线不卡| 国产精品另类一区| 欧美日本一区二区在线观看| 欧美乱熟臀69xxxxxx| 色欲综合视频天天天| 粉嫩蜜臀av国产精品网站| 免费成人美女在线观看.| 天使萌一区二区三区免费观看| 最新日韩在线视频| 亚洲欧美日韩一区二区 | 91蝌蚪porny成人天涯| 国产精品综合视频| 国产在线观看一区二区| 激情文学综合网| 韩国在线一区二区| 国产高清无密码一区二区三区| 毛片av中文字幕一区二区| 日韩av中文在线观看| 三级一区在线视频先锋 | 欧美tickling网站挠脚心| 91传媒视频在线播放| 日韩国产欧美在线视频| 国产露脸91国语对白| 色综合天天综合网天天看片| www.欧美亚洲| 日韩欧美一级二级三级久久久| 国产日韩高清在线| 亚洲男人的天堂一区二区 | 欧美电影免费观看高清完整版在| 88在线观看91蜜桃国自产| 国产剧情一区二区三区| 成人app在线观看| 欧美性生活久久| 久久免费精品国产久精品久久久久| 久久久精品一品道一区| 久久精品这里都是精品| 欧美激情一区在线| 91丨九色丨国产丨porny| 成人精品亚洲人成在线| 91麻豆精品久久久久蜜臀| 日韩小视频在线观看专区| 日韩伦理免费电影| 夜夜精品浪潮av一区二区三区| 天堂影院一区二区| 成人h动漫精品| 日韩视频一区二区三区在线播放 | 欧美无人高清视频在线观看| 欧美无砖专区一中文字| 精品国产乱码久久久久久图片 | 国内成+人亚洲+欧美+综合在线| 成人国产免费视频| 欧美精品黑人性xxxx| 亚洲乱码中文字幕| 91激情五月电影| 欧美肥妇bbw| 天堂va蜜桃一区二区三区漫画版| 蜜臀精品久久久久久蜜臀| 欧美日韩精品一区二区天天拍小说| 国产精品久久久久久久久免费相片 | 亚洲夂夂婷婷色拍ww47| 成人免费视频视频| 国产精品三级视频| 色先锋aa成人| 亚洲人成亚洲人成在线观看图片 | 欧美亚洲国产一区二区三区| 久久精品一区蜜桃臀影院| 国内精品久久久久影院薰衣草 | 91免费看`日韩一区二区| 国产精品美女久久久久aⅴ国产馆| 美脚の诱脚舐め脚责91| 欧美午夜在线观看| 男男gaygay亚洲| 日韩欧美在线综合网| 国产盗摄一区二区| 国产欧美一区二区精品秋霞影院 | 高清不卡一区二区在线| 国产三级精品三级| aaa国产一区| 亚洲精品乱码久久久久久黑人| 欧美日韩在线免费视频| 国产蜜臀av在线一区二区三区| 丰满放荡岳乱妇91ww| 亚洲成在线观看| 日韩精品一区国产麻豆| av激情综合网| 久久国产综合精品| 亚洲人成人一区二区在线观看| 欧美一级搡bbbb搡bbbb| 欧美色网一区二区| 午夜国产不卡在线观看视频| 中文字幕av一区 二区| 欧美日韩中文字幕一区二区| 偷拍一区二区三区| 国产精品嫩草99a| 欧美成人在线直播| 7777精品伊人久久久大香线蕉的| 成人动漫av在线| 成人动漫一区二区在线| 国产1区2区3区精品美女| 国产精品1区2区| 欧美成人免费网站| 狠狠色狠狠色合久久伊人| 三级亚洲高清视频| 日本不卡高清视频| 日韩avvvv在线播放| 午夜影院久久久| 国产女人水真多18毛片18精品视频| 精品99一区二区三区| 国产午夜精品久久久久久久 | 一区二区三区视频在线看| 91精品国产综合久久小美女| 欧美高清一级片在线| 精品制服美女丁香| 国产超碰在线一区| 777色狠狠一区二区三区| 五月天中文字幕一区二区| 青青草国产成人av片免费 | 中文字幕亚洲在| 日韩电影在线看| 丁香另类激情小说| 欧美色视频一区| 国产福利精品一区| www.欧美亚洲| 精品欧美乱码久久久久久| 日韩女优制服丝袜电影| 国产精品电影院| 麻豆国产精品官网| 97精品超碰一区二区三区| 91精品国产综合久久国产大片| 久久久久97国产精华液好用吗| 中文字幕一区av| 亚洲成a人片在线观看中文| 国产精品一区专区| 欧美色男人天堂| 精品sm在线观看| 日本免费新一区视频| 国产91精品在线观看| 久久综合资源网| 美女免费视频一区二区| 色综合天天综合在线视频| 国产一区二区主播在线| 欧美老人xxxx18| 亚洲丰满少妇videoshd| 91色综合久久久久婷婷|