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

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

?? ualpharenderer.pas

?? 一套及時通訊的原碼
?? PAS
字號:
//------------------------------------------------------------------------------
// File:              UAlphaRenderer.pas
// Original file(s): AlphaRenderer.h, AlphaRenderer.c
//
// Desc: DirectShow sample filter: Alpha Renderer
//
// Portions created by Microsoft are
// Copyright (c) Microsoft Corporation.  All rights reserved.
//------------------------------------------------------------------------------
{
  @abstract(Alpha Renderer Sample Filter from DS SDK)
  @author(Andriy Nevhasymyy: a.n@email.com)
  @created(Aug 11, 2003)
  @lastmod(Aug 12, 2003)
}

unit UAlphaRenderer;

interface
uses
  BaseClass, DirectShow9,
  Windows, SysUtils, Classes, ActiveX;

const
  CLSID_AlphaRenderer: TGUID = '{A63A8661-EEB3-4036-9964-EACD50973E4F}';

type
  TBCAlphaRenderer = class(TBCBaseRenderer)
  private
    FWnd      : HWND;
    FDC       : HDC;
    FWidth    : Integer;
    FHeight   : Integer;
    FBmi      : TBITMAPINFOHEADER;
    FCheckers : PDWord;

    procedure _Clear;

  public
    constructor Create(ObjName: String; Unk: IUnknown; out hr : HResult);
    constructor CreateFromFactory(Factory: TBCClassFactory;
      const Controller: IUnknown); override;

    destructor Destroy; override;

    // make sure media type is what we want
    //
    function CheckMediaType(MediaType: PAMMediaType): HResult; override;
    // have to ovverride this
    //
    function DoRenderSample(MediaSample: IMediaSample): HResult; override;
    // have to override this
    //
    function SetMediaType(MediaType: PAMMediaType): HResult; override;
    // override these to receive indication of when we change
    // to Pause/Play (Active) or Stop (Inactive) state.
    function Active: HResult; override;
    function Inactive: HResult; override;
  end;

implementation
{$BOOLEVAL OFF}

//
// CreateInstance
//
constructor TBCAlphaRenderer.Create(ObjName: String; Unk: IUnknown;
  out hr: HResult);
begin
  inherited Create(CLSID_AlphaRenderer, 'AlphaRenderer', Unk, hr);
  FWnd      := 0;
  FDC       := 0;
  FWidth    := 0;
  FHeight   := 0;
  FCheckers := nil;
end;

constructor TBCAlphaRenderer.CreateFromFactory(Factory: TBCClassFactory;
  const Controller: IUnknown);
var
  hr: HRESULT;
begin
  Create(Factory.Name, Controller, hr);
end;

destructor TBCAlphaRenderer.Destroy;
begin
  OutputDebugString('TBCAlphaRenderer.Destroy');
  _Clear;
  inherited Destroy;
end;

// throw away the window and the checkerboard pattern
//

procedure TBCAlphaRenderer._Clear;
begin
  if (FDC <> 0) then
  begin
    ReleaseDC(FWnd, FDC);
    FDC := 0;
  end;

  if (FWnd <> 0) then
  begin
    DestroyWindow(FWnd);
    FWnd := 0;
  end;

  if Assigned(FCheckers) then
  begin
    FreeMem(FCheckers);
    FCheckers := nil;
  end;
end;

// Called when we go paused or running

function TBCAlphaRenderer.Active: HResult;
begin
  // Make our renderer window visible
  ShowWindow(FWnd, SW_SHOWNORMAL);

  Result := inherited Active;
end;

// Called when we go into a stopped state

function TBCAlphaRenderer.Inactive: HResult;
begin
  // Make our renderer window visible
  ShowWindow(FWnd, SW_HIDE);

  Result := inherited Inactive;
end;

// make sure media type is what we want
//

function TBCAlphaRenderer.CheckMediaType(MediaType: PAMMediaType): HResult;
var
  VIH: PVIDEOINFOHEADER;
begin
  if (MediaType = nil) then
  begin
    Result := E_POINTER;
    Exit;
  end;

  // the major type must match
  if (not IsEqualGUID(MediaType.majortype, MEDIATYPE_Video)) or
    // the sub type must match
  (not IsEqualGUID(MediaType.subtype, MEDIASUBTYPE_ARGB32)) or
    // the format must match
  (not IsEqualGUID(MediaType.formattype, FORMAT_VideoInfo)) then
  begin
    Result := E_INVALIDARG;
    Exit;
  end;

  VIH := PVIDEOINFOHEADER(MediaType.pbFormat);
  Assert(Assigned(VIH));

  // we could do more here to ensure the image is right-side up
  // by looking at the bitmap info header in the VIDEOINFO struct
  //
  Result := NOERROR;
end;

// have to ovverride this, render the incoming sample onto the checkerboard
//

function TBCAlphaRenderer.DoRenderSample(MediaSample: IMediaSample): HResult;
var
  Bits: PByte;
  len, x: Integer;
  Source, Checkers: PRGBQUAD;
  d: RGBQUAD;

begin
  if (MediaSample = nil) then
  begin
    Result := E_POINTER;
    Exit;
  end;

  MediaSample.GetPointer(Bits);

  len := MediaSample.GetActualDataLength;
  Assert(len = FWidth * FHeight * SizeOf(DWord));

  // now blend checkerboard into bits before we blit them

  // the incoming source
  //
  Source := PRGBQUAD(Bits);

  // the checkerboard buffer
  //
  Checkers := PRGBQUAD(FCheckers);

  // blend them
  //
  for x := 0 to FWidth * FHeight - 1 do
  begin
    d.rgbRed := Byte((Source.rgbRed * Source.rgbReserved div 256 +
      Checkers.rgbRed * (256 - Source.rgbReserved) div 256));
    d.rgbGreen := Byte((Source.rgbGreen * Source.rgbReserved div 256 +
      Checkers.rgbGreen * (256 - Source.rgbReserved) div 256));
    d.rgbBlue := Byte((Source.rgbBlue * Source.rgbReserved div 256 +
      Checkers.rgbBlue * (256 - Source.rgbReserved) div 256));

    CopyMemory(Source, @d, SizeOf(RGBQUAD));
    Inc(Source);
    Inc(Checkers);
  end;

  // put the bits into the window
  //
  StretchDIBits(FDC,
    0, 0, FWidth, FHeight,
    0, 0, FWidth, FHeight,
    Bits, PBitmapInfo(@FBMI)^,
    DIB_RGB_COLORS, SRCCOPY);

  Result := NOERROR;
end;

// Must override this. We create the window here
//

function TBCAlphaRenderer.SetMediaType(MediaType: PAMMediaType): HResult;
var
  VIH: PVIDEOINFOHEADER;
  Width, Height, x, y: Integer;
  OnOff: Boolean;
  p: PDWord;
begin
  if (MediaType = nil) then
  begin
    Result := E_POINTER;
    Exit;
  end;

  _Clear;

  // we know it's a VIDEOINFOHEADER, since we demanded one
  // in CheckMediaType
  //
  VIH := PVIDEOINFOHEADER(MediaType.pbFormat);
  if (VIH = nil) then
  begin
    Result := E_UNEXPECTED;
    Exit;
  end;

  FWidth  := VIH.bmiHeader.biWidth;
  Width   := FWidth;
  FHeight := VIH.bmiHeader.biHeight;
  Height  := FHeight;

  // save this off for lookin' at it later
  //
  CopyMemory(@FBMI, @VIH.bmiHeader, SizeOf(TBitmapInfoHeader));
  //FBMI := @VIH.bmiHeader;

  // create the window
  //
  FWnd := CreateWindow(
    'STATIC', 'Video Renderer',
    WS_POPUP, // NOT Visible
    0, 0, Width, Height,
    0, 0, hInstance, nil
    );

  // get the DC
  //
  FDC := GetDC(FWnd);

  // create a checker buffer
  //
  try
    GetMem(FCheckers, SizeOf(DWord) * Width * Height);
    // draw the checkers
    //
    for x := 0 to Width - 1 do
      for y := 0 to Height - 1 do
      begin
        OnOff := False;

        if (x div 8 mod 2 = 0) then
          OnOff := not OnOff;

        if (y div 8 mod 2 = 0) then
          OnOff := not OnOff;

        p := FCheckers;
        Inc(p, y * Width);
        Inc(p, x);

        if not OnOff then
          p^ := 0
        else
          p^ := $FFFFFF;
      end;
    Result := NOERROR;
  except
    Result := E_OUTOFMEMORY;
  end;
end;

initialization
  // provide an entry in the CFactoryTemplate array
  TBCClassFactory.CreateFilter(TBCAlphaRenderer, '_ AlphaRenderer',
    CLSID_AlphaRenderer, CLSID_LegacyAmFilterCategory, MERIT_DO_NOT_USE,
    0, nil
    );
end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
五月天国产精品| 亚洲国产精品一区二区www| 日韩精品一区二区三区四区| 欧美一区二区免费| 亚洲视频狠狠干| 国内精品伊人久久久久影院对白| 懂色av一区二区三区蜜臀| 91麻豆精品国产91久久久使用方法 | 国产精品久久久久久久久晋中 | 欧美一区二区三区视频免费播放 | 久久精品欧美日韩精品| 亚洲在线免费播放| 成人激情文学综合网| 日韩无一区二区| 亚洲高清免费观看| 色综合久久久久综合体 | 91精品国产黑色紧身裤美女| 国产精品美日韩| 国内精品写真在线观看| 欧美二区在线观看| 亚洲一二三四在线| 91在线观看地址| 亚洲欧美综合另类在线卡通| 国产一区 二区| 欧美va日韩va| 蜜桃视频第一区免费观看| 欧美理论电影在线| 亚洲va欧美va天堂v国产综合| www.av精品| 最近日韩中文字幕| 97久久精品人人做人人爽50路 | 国产成人av电影免费在线观看| 欧美成人video| 极品少妇一区二区| 2017欧美狠狠色| 国产精品一二三区在线| 国产视频一区在线观看| 国产成人免费网站| 国产精品日韩成人| 成人午夜视频在线| 亚洲狼人国产精品| 欧美午夜片在线观看| 丝袜a∨在线一区二区三区不卡 | 男女激情视频一区| 欧美一区二区三区视频在线| 久久电影网站中文字幕| 久久久久国产精品免费免费搜索| 国产suv精品一区二区6| 18成人在线视频| 在线观看欧美黄色| 日韩国产精品大片| 精品国产自在久精品国产| 国产成人免费9x9x人网站视频| 亚洲欧洲色图综合| 欧美亚洲动漫精品| 日韩精品五月天| 国产拍欧美日韩视频二区| 91尤物视频在线观看| 五月激情综合婷婷| 日韩亚洲欧美高清| 国产高清在线精品| 欧美一区二区福利视频| 日韩vs国产vs欧美| 日韩女优av电影在线观看| 高清不卡一区二区| 性欧美大战久久久久久久久| 精品国产91亚洲一区二区三区婷婷| 国产91丝袜在线播放九色| 欧美不卡视频一区| 久久精品国内一区二区三区| 精品国产乱码久久久久久影片| 国产一区福利在线| 中文字幕一区二区三区色视频 | 久久伊99综合婷婷久久伊| 国产成人小视频| 亚洲综合免费观看高清完整版 | 激情另类小说区图片区视频区| 精品福利一二区| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 亚洲欧美福利一区二区| 宅男在线国产精品| 91免费版在线| 免费av成人在线| 成人免费在线观看入口| 欧美老肥妇做.爰bbww| 国产精品18久久久久久久久久久久 | 精品一区二区三区蜜桃| 国产精品情趣视频| 91在线精品一区二区| 亚洲国产乱码最新视频 | 欧洲人成人精品| 久久国产夜色精品鲁鲁99| 国产精品二三区| 日韩欧美一级二级三级 | 国产综合一区二区| 国产免费观看久久| 精品久久久久久久久久久久久久久| 成人性生交大片免费看中文网站| 久久精品国产99| 秋霞影院一区二区| 亚洲欧美aⅴ...| 国产午夜精品一区二区三区四区 | 亚洲一区在线播放| 国产精品美女久久福利网站| 日韩精品一区二区在线| 在线中文字幕一区二区| 国产成人精品免费| 久久电影网站中文字幕| 日日夜夜精品视频免费| 久久蜜臀精品av| 日韩限制级电影在线观看| 91麻豆免费看| 成人v精品蜜桃久久一区| 美女视频黄免费的久久| 亚洲成av人片观看| 亚洲精品日韩一| 中文字幕欧美激情一区| 欧美日韩国产高清一区二区| 精品视频资源站| 91在线观看污| 99视频有精品| 激情国产一区二区| 国产在线播放一区| 久久国产综合精品| 蜜臀av性久久久久av蜜臀妖精| 亚洲成人激情自拍| 亚洲电影第三页| 亚洲国产精品影院| 一区二区三区精品在线| 亚洲男人的天堂在线aⅴ视频| 国产精品久久久久影院老司| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美一区二区网站| 欧美一级欧美一级在线播放| 69p69国产精品| 91日韩精品一区| 欧美日韩免费电影| 91精品在线麻豆| 日韩欧美区一区二| 欧美xxx久久| 国产亚洲精品bt天堂精选| 国产日韩欧美a| 亚洲乱码国产乱码精品精可以看| 亚洲婷婷综合色高清在线| 亚洲品质自拍视频| 一区二区三区在线观看网站| 亚洲小说春色综合另类电影| 亚洲嫩草精品久久| 日韩精品电影一区亚洲| 日韩激情中文字幕| 黄一区二区三区| 成人涩涩免费视频| 91免费看片在线观看| 欧美日韩国产精品成人| 91精品国产综合久久蜜臀| 欧美午夜在线观看| 欧美国产精品一区二区三区| 亚洲美女淫视频| 免费观看成人鲁鲁鲁鲁鲁视频| 久久精品国产亚洲a| 丰满少妇久久久久久久| 一道本成人在线| 在线观看网站黄不卡| 久久久久久久久伊人| 一区二区在线看| 免播放器亚洲一区| 97精品久久久午夜一区二区三区| 欧美色图天堂网| 精品国产一区二区三区av性色| 中文字幕亚洲精品在线观看| 香蕉久久一区二区不卡无毒影院 | 国产精品亚洲一区二区三区在线 | 日韩不卡一区二区三区 | 欧美日韩一区不卡| 国产欧美一区二区精品仙草咪| 亚洲视频一区二区在线| 日本欧美一区二区在线观看| 成人黄色在线网站| 3d成人h动漫网站入口| 国产精品视频第一区| 人人爽香蕉精品| 国产在线视频一区二区三区| 欧美精品第一页| 国产精品电影一区二区三区| 人妖欧美一区二区| 91成人在线观看喷潮| 国产欧美一区二区精品仙草咪| 天天色图综合网| 国产丶欧美丶日本不卡视频| 欧美mv日韩mv国产网站app| 一区二区三区四区高清精品免费观看 | 国产精品福利av| 精品一二三四在线| 欧美美女直播网站| 亚洲欧洲一区二区三区| 国产不卡高清在线观看视频| 欧美高清hd18日本| 亚洲伊人色欲综合网| 国产精品99久久久久久有的能看| 久久久久久久网|