Rasterizer.h
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:2k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /* 
  2.  * Copyright (C) 2003-2005 Gabest
  3.  * http://www.gabest.org
  4.  *
  5.  *  This Program is free software; you can redistribute it and/or modify
  6.  *  it under the terms of the GNU General Public License as published by
  7.  *  the Free Software Foundation; either version 2, or (at your option)
  8.  *  any later version.
  9.  *   
  10.  *  This Program is distributed in the hope that it will be useful,
  11.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13.  *  GNU General Public License for more details.
  14.  *   
  15.  *  You should have received a copy of the GNU General Public License
  16.  *  along with GNU Make; see the file COPYING.  If not, write to
  17.  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 
  18.  *  http://www.gnu.org/copyleft/gpl.html
  19.  *
  20.  */
  21. #pragma once
  22. #include <vector>
  23. #include "..SubPicISubPic.h"
  24. #define PT_MOVETONC 0xfe
  25. #define PT_BSPLINETO 0xfc
  26. #define PT_BSPLINEPATCHTO 0xfa 
  27. class Rasterizer
  28. {
  29. bool fFirstSet;
  30. CPoint firstp, lastp;
  31. protected:
  32. BYTE* mpPathTypes;
  33. POINT* mpPathPoints;
  34. int mPathPoints;
  35. private:
  36. int mWidth, mHeight;
  37. typedef std::pair<unsigned __int64, unsigned __int64> tSpan;
  38. typedef std::vector<tSpan> tSpanBuffer;
  39. tSpanBuffer mOutline;
  40. tSpanBuffer mWideOutline;
  41. int mWideBorder;
  42. struct Edge {
  43. int next;
  44. int posandflag;
  45. } *mpEdgeBuffer;
  46. unsigned mEdgeHeapSize;
  47. unsigned mEdgeNext;
  48. unsigned int* mpScanBuffer;
  49. typedef unsigned char byte;
  50. protected:
  51. byte *mpOverlayBuffer;
  52. int mOverlayWidth, mOverlayHeight;
  53. int mPathOffsetX, mPathOffsetY;
  54. int mOffsetX, mOffsetY;
  55. private:
  56. void _TrashPath();
  57. void _TrashOverlay();
  58. void _ReallocEdgeBuffer(int edges);
  59. void _EvaluateBezier(int ptbase, bool fBSpline);
  60. void _EvaluateLine(int pt1idx, int pt2idx);
  61. void _EvaluateLine(int x0, int y0, int x1, int y1);
  62. static void _OverlapRegion(tSpanBuffer& dst, tSpanBuffer& src, int dx, int dy);
  63. public:
  64. Rasterizer();
  65. virtual ~Rasterizer();
  66. bool BeginPath(HDC hdc);
  67. bool EndPath(HDC hdc);
  68. bool PartialBeginPath(HDC hdc, bool bClearPath);
  69. bool PartialEndPath(HDC hdc, long dx, long dy);
  70. bool ScanConvert();
  71. bool CreateWidenedRegion(int border);
  72. void DeleteOutlines();
  73. bool Rasterize(int xsub, int ysub, bool fBlur);
  74. CRect Draw(SubPicDesc& spd, CRect& clipRect, byte* pAlphaMask, int xsub, int ysub, const long* switchpts, bool fBody, bool fBorder);
  75. };