青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

兔子的技術(shù)博客

兔子

   :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
  202 Posts :: 0 Stories :: 43 Comments :: 0 Trackbacks

留言簿(10)

最新評論

閱讀排行榜

評論排行榜

原文:http://blog.csdn.net/maozefa/archive/2008/08/04/2767721.aspx

   [b]自從文章[/b]《GDI+ 在Delphi程序的應(yīng)用 -- 可調(diào)節(jié)的文字陰影特效》發(fā)表后,不少人問我怎樣實現(xiàn)文字描邊。由于我只是個業(yè)余編程愛好者,加上文化底蘊(yùn)差,只要涉及算法和編程理論方面的東西,我就無能為力了,所以直到目前,我也不知道具體的描邊算法是怎樣的(網(wǎng)上搜索過N次,也沒找到答案,可能這方面的東西是要賣錢的)。

    因問得人多了,有時我也思索和研究一下,總算找了個方法可以實現(xiàn),雖然同專業(yè)的圖像軟件(如PhotoShop)文字描邊效果相比差強(qiáng)人意,但可以湊合湊合,作為研究心得,將代碼貼在這里備查。

 

    在《GDI+ 在Delphi程序的應(yīng)用 -- 可調(diào)節(jié)的文字陰影特效》一文的內(nèi)容的基礎(chǔ)上,對文字陰影效果代碼進(jìn)行了改進(jìn)和擴(kuò)充,擴(kuò)充的功能有2點:一是由原來只能產(chǎn)生黑色陰影擴(kuò)充為任意顏色陰影;二是可以對陰影進(jìn)行擴(kuò)展。有了這2個功能,利用陰影效果也就可以進(jìn)行文字描邊了,推而廣之,也可實現(xiàn)圖像的描邊。下面是具體的代碼內(nèi)容:

 

// 備份圖像。Data: GDI+位圖數(shù)據(jù),32位ARGB格式; Dest: 備份目標(biāo); Color: 陰影顏色

procedure BackImage(Data: TBitmapData; Dest: Pointer; Color: TARGB);
asm
    push    esi
    push    edi

    mov     esi, [eax + 16]   // esi = Data.Scan0
    mov     edi, edx          // esi = Dest
    mov     edx, ecx          // edx = Color & 0xffffff
    and     edx, 0FFFFFFh
    mov     ecx, [eax]        // ecx = Data.Height * Data.Width
    imul    ecx, [eax + 4]
    cld

  @Loop:                       // for (; ecx >= 0; ecx --)
    or      [esi], edx
    movsd                      //   *edi++ = *esi++ & 0xff000000 | edx
    loop    @Loop

    pop     edi
    pop     esi
end;

// 擴(kuò)展。Data: GDI+位圖數(shù)據(jù),32位ARGB格式; Source: 復(fù)制的源
// ExpMatrix: 卷積矩陣; MatrixSize:矩陣大小
procedure MakeExpand(Data: TBitmapData; Source, ExpMatrix: Pointer;
    MatrixSize: LongWord);
var
  Radius, mSize, rSize: LongWord;
  x, y: LongWord;
  Width, Height: Integer;
  Matrix: Pointer;
  Stride: LongWord;
asm
    push    esi
    push    edi
    push    ebx

    mov     esi, edx          // esi = Source
    mov     edi, [eax + 16]   // edi = Data.Scan0 + 3 (Alpha byte)
    add     edi, 3
    add     ecx, 3
    mov     Matrix, ecx       // Matrix = ExpMatrix + 3 (Alpha byte)
    mov     ecx, MatrixSize
    mov     edx, ecx
    dec     ecx
    mov     ebx, [eax]
    sub     ebx, ecx
    mov     Width, ebx        // Width = Data.Width - (MatrixSize - 1)
    mov     ebx, [eax + 4]
    sub     ebx, ecx
    mov     Height, ebx       // Height = Data.Height - (MatrixSize - 1)
    shr     ecx, 1
    mov     Radius, ecx       // Radius = MatrixSize / 2
    mov     eax, [eax + 8]
    mov     Stride, eax
    mov     mSize, eax
    shl     edx, 2
    sub     mSize, edx        // mSize = Data.Stride - MatrixSize * 4
    add     eax, 4
    imul    eax, ecx
    add     eax, 3
    add     esi, eax          // esi = esi + (Data.Stride * Radius + Radius * 4 + 3)
    shl     ecx, 3
    mov     rSize, ecx        // rSize = Radius * 2 * 4

    mov     y, 0              // for (y = 0; y < Height; y ++)
  @yLoop:                     // {
    mov     x, 0              //   for (x = 0; x < Width; x ++)
  @xLoop:                     //   {
    test    [esi], 0ffh       //     if (*esi != 0)
    jz      @NextPixel        //     {
    test    [esi - 4], 0ffh
    jz      @001
    test    [esi + 4], 0ffh
    jz      @001
    mov     ebx, Stride
    test    [esi + ebx], 0ffh
    jz      @001
    neg     ebx
    test    [esi + ebx], 0ffh
    jnz     @NextPixel
  @001:
    push    edi               //       Save(edi)
    mov     ebx, Matrix       //       ebx = Matrix
    mov     edx, MatrixSize   //       for (I = 0; I < MatrixSize; I ++)
  @Loop3:                     //       {
    mov     ecx, MatrixSize   //         for (J = 0; J <= MatrixSize; J ++)
  @Loop4:                     //         {
    mov      al, [ebx]        //           *edi = max(*ebx, *edi)
    cmp     al, [edi]
    jb      @002
    mov     [edi], al
  @002:
    add     edi, 4            //           edi += 4
    add     ebx, 4            //           ebx += 4
    loop    @Loop4            //         }
    add     edi, mSize        //         edi += mSize
    dec     edx
    jnz     @Loop3            //       }
    pop     edi               //       Reset(edi)
  @NextPixel:                 //     }
    add     edi, 4            //     edi += 4
    add     esi, 4            //     esi += 4
    inc     x
    mov     eax, x
    cmp     eax, Width
    jl      @xLoop            //   }
    add     esi, rSize
    add     edi, rSize
    inc     y
    mov     eax, y
    cmp     eax, Height
    jl      @yLoop            // }

    pop     ebx
    pop     edi
    pop     esi
end;

procedure GdipShadow(Data: TBitmapData; Buf: Pointer; Radius: LongWord);
var
  Gauss: array of Integer;
  Q: Double;
  x, y, n, z: Integer;
  p: PInteger;
begin
  // 根據(jù)半徑計算高斯模糊矩陣
  Q := Radius / 2;
  if Q = 0 then Q := 0.1;
  n := Radius shl 1 + 1;
  SetLength(Gauss, n * n);
  p := @Gauss[0];
  z := 0;
  for x := -Radius to Radius do
    for y := -Radius to Radius do
    begin
      p^ := Round(Exp(-(x * x + y * y) / (2.0 * Q * Q)) / (2.0 * PI * Q * Q) * 1000.0);
      Inc(z, p^);
      Inc(p);
    end;
  MakeShadow(Data, Buf, Gauss, n, z);
end;

procedure GdipBorder(Data: TBitmapData; Buf: Pointer; Expand: LongWord; Color: TARGB);
var
  bmp: TGpBitmap;
  bg: TGpGraphics;
  Data1: TBitmapData;
  Size: Integer;
begin
  Size := Expand shl 1 + 1;
  bmp := TGpBitmap.Create(Size, Size, pf32bppARGB);
  bg := TGpGraphics.Create(bmp);
  try
    // 制造一個直徑=Size,消除鋸齒后的圓作為描邊(或擴(kuò)展)的位圖畫筆
    bg.SmoothingMode := smAntiAlias;
    bg.PixelOffsetMode := pmHalf;
    bg.FillEllipse(Brushs[Color], 0, 0, Size, Size);
    Data1 := bmp.LockBits(GpRect(0, 0, Size, Size), [imRead], pf32bppARGB);
    try
      // 用位圖畫筆擴(kuò)展圖像
      MakeExpand(Data, Buf, Data1.Scan0, Size);
    finally
      bmp.UnlockBits(Data1);
    end;
  finally
    bg.Free;
    bmp.Free;
  end;
end;

procedure DrawShadow(const g: TGpGraphics; const Bitmap: TGpBitmap;
    const layoutRect: TGpRectF; ShadowSize, Distance: LongWord;
    Angle: Single; Color: TARGB; Expand: LongWord);
var
  dr, sr: TGpRectF;
  Data: TBitmapData;
  Buf: Pointer;
  SaveScan0: Pointer;
begin
  Data := Bitmap.LockBits(GpRect(0, 0, Bitmap.Width, Bitmap.Height),
                          [imRead, imWrite], pf32bppARGB);
  GetMem(Buf, Data.Height * Data.Stride);
  try
    BackImage(Data, Buf, Color);
    if Expand > ShadowSize then
      Expand := ShadowSize;
    if Expand <> 0 then            // 處理文字陰影擴(kuò)展
      if Expand <> ShadowSize then
      begin
        SaveScan0 := Data.Scan0;
        Data.Scan0 := Buf;
        GdipBorder(Data, SaveScan0, Expand, Color);
        Data.Scan0 := SaveScan0;
      end else
        GdipBorder(Data, Buf, Expand, Color);
    if Expand <> ShadowSize then   // 處理文字陰影效果
      GdipShadow(Data, Buf, ShadowSize - Expand);
  finally
    FreeMem(Buf);
    Bitmap.UnlockBits(Data);
  end;
  sr := GpRect(0.0, 0.0, Data.Width, Data.Height);
//  sr := GpRect(0.0, 0.0, layoutRect.Width + ShadowSize * 2 + 2,
//               layoutRect.Height + ShadowSize * 2 + 2);
  dr := GpRect(layoutRect.Point, sr.Size);
  // 根據(jù)角度計算陰影位圖在目標(biāo)畫布的偏移量
  Offset(dr, Cos(PI * Angle / 180) * Distance - ShadowSize - 1,
         Sin(PI * Angle / 180) * Distance - ShadowSize - 1);
  // 輸出陰影位圖到目標(biāo)畫布
  g.DrawImage(Bitmap, dr, sr.X, sr.Y, sr.Width, sr.Height, utPixel);
end;

// 計算并輸出文字陰影效果
// g: 文字輸出的畫布; str要輸出的文字; font: 字體; layoutRect: 限定的文字輸出范圍
// ShadowSize: 陰影大小; Distance: 陰影距離;
// Angle: 陰影輸出角度(左邊平行處為0度。順時針方向)
// ShadowAlpha: 陰影文字的不透明度; format: 文字輸出格式
procedure DrawShadowString(const g: TGpGraphics; const str: WideString;
    const font: TGpFont; const layoutRect: TGpRectF;
    ShadowSize, Distance: LongWord; Angle: Single = 60;
    Color: TARGB = $C0000000; Expand: LongWord = 0;
    const format: TGpStringFormat = nil); overload;
var
  Bmp: TGpBitmap;
  Bg: TGpGraphics;
begin
  // 建立透明的32位ARGB陰影位圖,大小為layoutRect長、寬度 + ShadowSize * 2 + 2
  Bmp := TGpBitmap.Create(Round(layoutRect.Width + 0.5) + ShadowSize shl 1 + 2,
                          Round(layoutRect.Height + 0.5) + ShadowSize shl 1 + 2,
                          pf32bppARGB);
  Bg := TGpGraphics.Create(Bmp);
  try
    Bg.TextRenderingHint := thAntiAlias;
    // 以Color不透明度的黑色畫刷,在ShadowSize + 1處輸出文字到位圖畫布。
    // 方便黑色以外的陰影顏色替換(直接用Color畫,模糊處理后很難看)
    Bg.DrawString(str, font, Brushs[Color and $FF000000],
                  GpRect(ShadowSize + 1, ShadowSize + 1,
                  layoutRect.Width, layoutRect.Height), format);
    DrawShadow(g, Bmp, layoutRect, ShadowSize, Distance, Angle, Color, Expand);
  finally
    Bg.Free;
    Bmp.Free;
  end;
end;

// 計算并輸出文字陰影效果,除以輸出點origin替代上面布局矩形外,其他參數(shù)同上
procedure DrawShadowString(const g: TGpGraphics; const str: WideString;
    const font: TGpFont; const origin: TGpPointF;
    ShadowSize, Distance: LongWord; Angle: Single = 60;
    Color: TARGB = $C0000000; Expand: LongWord = 0;
    const format: TGpStringFormat = nil); overload;
begin
  DrawShadowString(g, str, font, g.MeasureString(str, font, origin, format),
                   ShadowSize, Distance, Angle, Color, Expand, format);
end;
    上面代碼中MakeShadow過程的代碼在《GDI+ 在Delphi程序的應(yīng)用 -- 可調(diào)節(jié)的文字陰影特效》一文中,本文沒有貼出。由于代碼中已經(jīng)有了較詳細(xì)的注釋,故不再解釋。下面貼出測試代碼:


procedure TextPaint(g: TGpGraphics);
var
  brush: TGpLinearGradientBrush;
  font: TGpFont;
  fontFamily: TGpFontFamily;
  r: TGpRect;
begin
  fontFamily := TGpFontFamily.Create({'Times New Roman'}'華文行楷');
  font := TGpFont.Create(fontFamily, 55, [fsBold], utPixel);
  r := GpRect(Form1.PaintBox1.ClientRect);
  brush := TGpLinearGradientBrush.Create(r, kcBlue, kcAliceBlue, 90);
  g.FillRectangle(Brush, r);

  DrawShadowString(g, '文字陰影特效', font, GpPoint(10, r.Height / 3), 5, 10, 60, $C0000000, 1);
  DrawShadowString(g, '文字陰影特效', font, GpPoint(10, r.Height / 3), 1, 0, 60, $FFFF0000, 1);

//  DrawShadowString(g, '文字陰影特效', font, GpPoint(10, r.Height / 3), 5, 12, 60, $C0000000, 1);
//  DrawShadowString(g, '文字陰影特效', font, GpPoint(10, r.Height / 3), 2, 3, 60, $FFc00000, 1);
  g.TextRenderingHint := thAntiAlias;
  g.DrawString('文字陰影特效', font, Brushs.White, 10, r.Height / 3);
  font.Free;
  fontFamily.Free;
  Brush.Free;
end;
    以下是測試代碼效果圖,圖一和圖二都是文字描邊(1個像素的邊框)加陰影效果,其中圖一沒進(jìn)行陰影擴(kuò)展,即上面的15行的代碼最后一個參數(shù)為0,圖二是加了1個像素的陰影擴(kuò)展效果(上述代碼的“正宗”輸出):

 圖一

 

圖二

 

    利用改進(jìn)的陰影效果,不僅可實現(xiàn)文字描邊,也可顯示類似立體文字的效果(改變顯示距離),上面測試代碼中,被注釋的2句代碼輸出效果如下:

 

圖三


    至于圖像的描邊,似乎沒有文字的描邊效果好,究其原因,主要是圖像的輪廓看起來好像是圓潤平滑的,其實有很多半影鋸齒,在Photoshop中,通過先選區(qū)后描邊,可能對選區(qū)邊緣作了處理,所以效果相當(dāng)好(專業(yè)的軟件,肯定有很好的算法)。下面是我對一張小圖片作的描邊處理代碼和輸出效果圖:

// 圖像描邊
// g: 文字輸出的畫布; Image: 圖像; x, y: 圖像輸出原點
// BorderWidth: 總的邊框?qū)挾? Color: 邊框顏色;
// Expand: 邊框擴(kuò)散大小; Attributes: 圖像顯示屬性
procedure DrawImageBorder(const g: TGpGraphics; const Image: TGpImage;
    x, y: Single; BorderWidth: LongWord; Color: TARGB = kcWhite;
    Expand: LongWord = 0; const Attributes: TGpImageAttributes = nil);
var
  Bmp: TGpBitmap;
  Bg: TGpGraphics;
  ColorMatrix: TColorMatrix;
  Attr: TGpImageAttributes;
  layoutRect: TGpRectF;
begin
  Bmp := TGpBitmap.Create(Image.Width + BorderWidth shl 1 + 2,
                          Image.Height + BorderWidth shl 1 + 2,
                          pf32bppARGB);
  Bg := TGpGraphics.Create(Bmp);
  Attr := Attributes;
  if Attr = nil then
    Attr := TGpImageAttributes.Create;
  try
    FillChar(ColorMatrix, Sizeof(TColorMatrix), 0);
    ColorMatrix[3, 3] := 1;
    ColorMatrix[4, 4] := 1;
    // 利用顏色矩陣將圖像輸出為黑色,以便邊框顏色替換
    Attr.SetColorMatrix(ColorMatrix);
    layoutRect := GpRect(x, y, Image.Width, Image.Height);
    Bg.DrawImage(Image,
                 GpRect(BorderWidth + 1, BorderWidth + 1, layoutRect.Width, layoutRect.Height),
                 0, 0, layoutRect.Width, layoutRect.Height, utPixel, Attr);
    DrawShadow(g, Bmp, layoutRect, BorderWidth, 0, 0, Color, BorderWidth - Expand);
  finally
    if Attributes <> nil then
      Attr.ClearColorMatrix
    else
      Attr.Free;
    Bg.Free;
    Bmp.Free;
  end;
end;

procedure ImagePaint(g: TGpGraphics);
var
  brush: TGpLinearGradientBrush;
  r: TGpRect;
  Image: TGpImage;
  Attributes: TGpImageAttributes;
begin
  r := GpRect(Form1.PaintBox1.ClientRect);
  brush := TGpLinearGradientBrush.Create(r, kcBlue, kcAliceBlue, 90);
  g.FillRectangle(Brush, r);
  Image := TGpImage.Create('..\..\Media\Watermark.bmp');
  // 畫原圖
  g.TranslateTransform(20, r.Height / 3);
  g.DrawImage(Image, 0, 0, Image.Width, Image.Height);
  // 設(shè)置圖像透明色
  Attributes := TGpImageAttributes.Create;
  Attributes.SetColorKey($ff00ff00, $ff00ff00);
  // 畫2個像素的描邊圖
  g.TranslateTransform(Image.Width + 20, 0);
  DrawImageBorder(g, Image, 0, 0, 2, kcWhite, 0, Attributes);
  g.DrawImage(Image, GpRect(0.0, 0, Image.Width, Image.Height),
              0.0, 0.0, Image.Width, Image.Height, utPixel, Attributes);
  // 畫5個像素的描邊圖,其中擴(kuò)散3像素
  g.TranslateTransform(Image.Width + 20, 0);
  DrawImageBorder(g, Image, 0, 0, 5, kcWhite, 3, Attributes);
  g.DrawImage(Image, GpRect(0.0, 0, Image.Width, Image.Height),
              0.0, 0.0, Image.Width, Image.Height, utPixel, Attributes);
  Attributes.Free;
  Brush.Free;
  Image.Free;
end;

 

 

圖四

    上面的效果圖中,左邊是原圖,中間是2個像素的描邊圖,右邊是5個像素的描邊圖,其中有3像素的模糊擴(kuò)散。從圖中可以看出,我以$ff00ff00為透明色處理圖像四個角后,在中間和右邊的描邊圖中,還是很明顯的看到四個角有很淡的綠色,正是這個原因,在中間圖的圓角描邊有明顯的鋸齒。

 

    最后作幾點說明:

    1、本文純屬業(yè)余學(xué)習(xí)和研究的心得,并非什么正宗的算法;

    2、因為本文代碼是學(xué)習(xí)時即興寫的,并非優(yōu)化代碼,而且是以過程形式出現(xiàn)的,有興趣的朋友可以自己進(jìn)行優(yōu)化改進(jìn),寫成類或者元件更好(由于算法和功能都不是很完善,所以我沒寫成類的形式);

    3、例子中的GDI+版本系本人自己改寫的,與網(wǎng)上流通的版本不完全兼容,如需使用本版本,請參照《GDI+ for VCL基礎(chǔ) -- GDI+ 與 VCL 》一文的下載地址,并請留意后面的修改說明。

    4、如有好的建議,請來信:maozefa@hotmail.com

 

    更新(2008-8-5 12:50):在MakeExpand過程中,是按圖象逐點用位圖畫筆矩陣填充的,每個像素點都要進(jìn)行矩陣大小的操作,最小的1像素擴(kuò)展的矩陣大小為3 * 3,可見擴(kuò)展速度是不大理想的。今天對代碼作了一點修改,對每個象素點都進(jìn)行了判斷,如果是邊界像素,則作畫筆矩陣填充,否則直接跳過,這樣一來,速度應(yīng)該提高不少(沒作測試,增加的代碼用紅色標(biāo)出,有興趣者可以測試)。

 
原作者相關(guān)文章:
GDI+ 在Delphi程序的應(yīng)用 -- 可調(diào)節(jié)的文字陰影特效
GDI+在Delphi程序的應(yīng)用 – Photoshop色相/飽和度/明度功能

posted on 2009-09-07 10:53 會飛的兔子 閱讀(2106) 評論(0)  編輯 收藏 引用 所屬分類: 框架/圖像/算法
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            蜜臀99久久精品久久久久久软件| 欧美图区在线视频| 一区二区精品国产| 亚洲欧美日韩国产中文| 亚洲大黄网站| 亚洲午夜国产一区99re久久| 亚洲国产精品黑人久久久| 一本色道久久综合亚洲精品小说| 国内精品视频666| 亚洲精品在线看| 国产一区二区日韩| 国产精品99久久不卡二区| 亚洲韩日在线| 久久国产88| 久久激情视频免费观看| 欧美精品在欧美一区二区少妇| 两个人的视频www国产精品| 国产精品成人国产乱一区 | 国产一区免费视频| 亚洲第一毛片| 在线观看成人av电影| 亚洲国产毛片完整版| 海角社区69精品视频| 中文欧美日韩| 欧美在线播放| 国产一区二区三区四区老人| 性一交一乱一区二区洋洋av| 欧美自拍丝袜亚洲| 国产在线高清精品| 久久精品国产99精品国产亚洲性色| 久久久久久久一区二区三区| 国产一区在线观看视频| 久久精品在线播放| 欧美成人网在线| 亚洲毛片在线观看.| 欧美另类69精品久久久久9999| 亚洲欧洲综合| 亚洲影院一区| 国色天香一区二区| 免费成人高清视频| 99精品免费网| 久久精品国产一区二区三区| 在线看片成人| 欧美日韩国语| 性xx色xx综合久久久xx| 欧美成人午夜激情在线| 亚洲欧洲一区二区在线播放| 欧美三区在线| 久久精品人人爽| 亚洲欧洲在线看| 欧美在线地址| 亚洲精品免费观看| 国产精品一区=区| 久久人人爽人人| 一区二区三区日韩精品| 久久综合影音| 一区二区三区日韩欧美精品| 国产精品视频成人| 欧美成人有码| 欧美一区二视频| 亚洲精品久久| 久热re这里精品视频在线6| 99成人免费视频| 狠狠色丁香婷综合久久| 欧美欧美天天天天操| 欧美一区二区三区啪啪| 99ri日韩精品视频| 欧美激情一区二区三区高清视频| 亚洲性xxxx| 亚洲肉体裸体xxxx137| 国产日韩欧美一区| 欧美三区美女| 欧美777四色影视在线| 性色一区二区三区| 一区二区三区免费在线观看| 欧美国产免费| 久久视频一区二区| 性视频1819p久久| 正在播放日韩| 日韩午夜三级在线| 亚洲国产精品va| 国内精品嫩模av私拍在线观看| 欧美视频免费看| 欧美福利一区二区| 老色鬼精品视频在线观看播放| 午夜精彩国产免费不卡不顿大片| 亚洲精品日本| 91久久久亚洲精品| 欧美成人亚洲成人日韩成人| 久久精品二区| 久久国产直播| 欧美一区国产在线| 午夜免费电影一区在线观看| 洋洋av久久久久久久一区| 最近中文字幕日韩精品| 在线观看国产精品淫| 国产揄拍国内精品对白| 国产日韩精品入口| 国产午夜精品一区二区三区视频 | 欧美在线观看视频在线| 亚洲一区二区三区四区五区黄| 亚洲美女视频在线观看| 亚洲精品中文字幕有码专区| 136国产福利精品导航| 极品裸体白嫩激情啪啪国产精品| 国产综合18久久久久久| 国内外成人免费激情在线视频网站 | 欧美午夜不卡视频| 欧美精品性视频| 欧美日韩免费| 欧美三级网址| 国产精品免费一区豆花| 国产农村妇女精品一二区| 国产酒店精品激情| 黄色精品一二区| 亚洲国产精品va| 亚洲乱码视频| 亚洲一区二区三区免费在线观看| 亚洲一区久久久| 亚欧成人精品| 老鸭窝毛片一区二区三区| 亚洲动漫精品| 国产精品99久久不卡二区| 午夜精品在线视频| 老司机一区二区三区| 欧美日本网站| 国产日韩欧美电影在线观看| 狠狠久久亚洲欧美| 日韩一区二区精品视频| 亚洲欧美在线看| 久久综合网色—综合色88| 亚洲国产成人tv| 亚洲亚洲精品在线观看| 久久精品日产第一区二区| 欧美国产极速在线| 国产精品视频免费一区| 尤物视频一区二区| 一区二区三区精密机械公司 | 亚洲第一视频网站| 在线一区免费观看| 久久精品一区蜜桃臀影院| 欧美美女操人视频| 国产日韩欧美精品| 一区二区精品| 久久天天狠狠| 在线亚洲精品| 另类专区欧美制服同性| 国产精品久久久一区二区| 在线观看国产一区二区| 亚洲你懂的在线视频| 欧美激情精品久久久久久变态| 亚洲无人区一区| 模特精品在线| 国产尤物精品| 亚洲欧美日韩国产中文| 欧美黑人在线观看| 欧美一区二区三区在线播放| 欧美国产视频在线| 在线观看福利一区| 欧美在线日韩| 一区二区高清在线| 欧美激情1区2区| 亚洲国产婷婷香蕉久久久久久99 | 久久成人精品一区二区三区| 欧美日韩一区自拍| 亚洲美女福利视频网站| 蜜桃av久久久亚洲精品| 亚洲女ⅴideoshd黑人| 欧美激情精品久久久久久| 伊人久久亚洲影院| 久久久国产精品一区| 一个色综合av| 欧美日韩另类在线| 亚洲精品日韩在线| 欧美不卡在线视频| 久久久久久久综合日本| 国产欧美在线看| 欧美一区成人| 亚洲在线观看| 国产乱子伦一区二区三区国色天香| 亚洲视频1区| 一本久久综合亚洲鲁鲁五月天| 欧美激情影音先锋| 亚洲精品一区在线观看| 欧美激情第9页| 欧美 日韩 国产在线| 亚洲国产另类久久精品| 美女精品视频一区| 乱人伦精品视频在线观看| 在线精品国产欧美| 欧美福利专区| 欧美精品激情blacked18| 日韩视频在线你懂得| 最近中文字幕mv在线一区二区三区四区 | 在线视频你懂得一区| 亚洲精品国产精品乱码不99| 欧美精品在线一区二区三区| 99伊人成综合| 亚洲综合清纯丝袜自拍| 国产一区二区电影在线观看|