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

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

?? bitmapregion.pas

?? 小程序 可以任意的拖動 會找到一定的水平線 右擊退出即可
?? PAS
字號:
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.

 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本精品一区二区三区高清| 午夜电影网一区| 国产美女一区二区三区| 欧美xxxx老人做受| 狠狠狠色丁香婷婷综合久久五月| 精品播放一区二区| 国产精品一区二区三区网站| 亚洲精品一区二区三区蜜桃下载| 精品一区二区精品| 国产校园另类小说区| 成人黄动漫网站免费app| 国产精品女人毛片| 91美女视频网站| 一区二区三区在线播| 欧美人与z0zoxxxx视频| 蜜桃传媒麻豆第一区在线观看| 欧美一区二区三区喷汁尤物| 国产一区中文字幕| 中文字幕一区二区三区在线观看| 一道本成人在线| 日韩国产欧美三级| 久久综合给合久久狠狠狠97色69| 岛国一区二区三区| 亚洲已满18点击进入久久| 在线成人午夜影院| 国产精品1024| 亚洲一区二区四区蜜桃| 精品美女一区二区| 91视视频在线直接观看在线看网页在线看| 一区二区三区四区不卡在线| 538在线一区二区精品国产| 久久国产精品色| 中文字幕一区二区视频| 91精选在线观看| 粉嫩一区二区三区性色av| 亚洲一区在线视频观看| 日韩一级黄色片| 99精品视频一区二区| 美腿丝袜亚洲色图| 中文字幕一区二| 日韩免费福利电影在线观看| av爱爱亚洲一区| 日韩中文字幕亚洲一区二区va在线| 精品国产91久久久久久久妲己| 色爱区综合激月婷婷| 国产精品一级在线| 日韩精品五月天| 亚洲欧美另类图片小说| 久久天天做天天爱综合色| 91成人免费在线| 国产成人夜色高潮福利影视| 亚洲国产精品久久久久婷婷884| 久久久久久久久久久久电影| 欧美日韩国产成人在线免费| 99精品欧美一区二区蜜桃免费| 毛片基地黄久久久久久天堂| 亚洲理论在线观看| 欧美国产亚洲另类动漫| 精品国内二区三区| 欧美久久久一区| 91国产精品成人| 91一区二区三区在线播放| 国产成人综合视频| 九色|91porny| 奇米精品一区二区三区在线观看 | 精品少妇一区二区三区日产乱码| 91色九色蝌蚪| 成人福利视频网站| 成人综合在线视频| 国产老妇另类xxxxx| 久久99精品久久久| 美脚の诱脚舐め脚责91| 亚洲成人动漫精品| 亚洲高清在线视频| 亚洲bt欧美bt精品777| 亚洲国产日韩在线一区模特 | 久久婷婷成人综合色| 欧美一区二区三区在| 欧美精品粉嫩高潮一区二区| 欧美日韩三级在线| 欧美精品电影在线播放| 91麻豆精品国产91久久久久久 | 99久久久精品| 99视频精品免费视频| 成人av影视在线观看| 成人av网在线| 91啪九色porn原创视频在线观看| 成人av在线播放网址| 99久久99久久精品国产片果冻 | 欧美三区免费完整视频在线观看| 91片在线免费观看| 欧美性大战xxxxx久久久| 欧美美女bb生活片| 日韩一区二区免费视频| 日韩欧美一区二区免费| 2020日本不卡一区二区视频| 久久精品视频免费| 自拍偷拍亚洲综合| 亚洲一区二区精品视频| 日韩成人一级大片| 黄网站免费久久| 成人综合在线视频| 欧美午夜视频网站| 精品日韩成人av| 国产日产欧美一区二区视频| 自拍偷拍欧美精品| 午夜精品福利视频网站| 久久99精品一区二区三区| 国产一区福利在线| 99久久国产综合精品麻豆| 欧美探花视频资源| 精品日韩99亚洲| 中文字幕一区二区三区不卡在线| 亚洲午夜电影网| 久久99精品视频| 91美女片黄在线观看91美女| 666欧美在线视频| 国产无一区二区| 亚洲国产中文字幕在线视频综合| 久久se这里有精品| 91视频免费播放| 精品理论电影在线| 亚洲免费看黄网站| 奇米色777欧美一区二区| 成人美女视频在线观看| 欧美久久免费观看| 中文字幕一区视频| 久久99精品国产91久久来源| 99在线精品一区二区三区| 日韩一区二区电影网| 亚洲情趣在线观看| 精品一区二区免费| 欧美日韩国产a| **性色生活片久久毛片| 精品一区二区三区在线观看国产| 91免费看`日韩一区二区| 精品国产免费一区二区三区四区| 亚洲三级小视频| 国产毛片精品一区| 制服视频三区第一页精品| 一色桃子久久精品亚洲| 国内精品免费**视频| 7777女厕盗摄久久久| 一区二区在线观看av| 岛国精品在线观看| 久久婷婷久久一区二区三区| 日韩精品一级二级 | 欧美在线色视频| 亚洲国产成人在线| 国内精品免费在线观看| 日韩欧美中文一区| 五月天精品一区二区三区| 色综合一区二区三区| 国产精品三级视频| 国产精品一区二区三区99| 日韩三级视频在线看| 三级一区在线视频先锋 | 亚洲超碰精品一区二区| 91在线观看成人| 欧美极品aⅴ影院| 国产成人综合网站| 久久久久久久久久电影| 精品一区二区在线看| 精品捆绑美女sm三区| 九九**精品视频免费播放| 91精品国产全国免费观看| 亚洲18影院在线观看| 欧美日本一道本| 亚洲超碰精品一区二区| 欧美精品在线一区二区三区| 午夜精品在线看| 欧美一区二区三区视频免费播放| 日日摸夜夜添夜夜添精品视频| 欧美精品一二三| 蜜芽一区二区三区| 日韩写真欧美这视频| 久久精品理论片| 26uuu国产日韩综合| 久久久久久久性| 欧美亚一区二区| 欧美丝袜丝交足nylons| 久久久久国产成人精品亚洲午夜 | 在线精品视频一区二区| 97国产精品videossex| 欧美日韩一区高清| 欧美人体做爰大胆视频| 91黄色激情网站| 国产乱子伦视频一区二区三区| 成人手机在线视频| 成人免费av在线| 99免费精品在线| 国产成人av电影在线播放| 成人三级伦理片| 91精品国产综合久久精品图片| 欧美日韩国产大片| 色婷婷一区二区| 色狠狠色噜噜噜综合网| 成人av资源在线| 成人av一区二区三区| 成人激情免费网站|