VobSubImage.h
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:3k
- /*
- * Copyright (C) 2003-2005 Gabest
- * http://www.gabest.org
- *
- * This Program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This Program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Make; see the file COPYING. If not, write to
- * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- */
- #pragma once
- #include <afx.h>
- #include <afxtempl.h>
- #include <atlcoll.h>
- typedef CArray<CPoint> CPointArray;
- typedef CArray<int> CDirArray;
- typedef struct
- {
- CPointArray pa;
- CDirArray da;
- void RemoveAll() {pa.RemoveAll(); da.RemoveAll();}
- void Add(CPoint p, int d) {pa.Add(p); da.Add(d);}
- } COutline;
- typedef CAutoPtrList<COutline> COutlineList;
- class CVobSubImage
- {
- friend class CVobSubFile;
- private:
- CSize org;
- RGBQUAD* lpTemp1;
- RGBQUAD* lpTemp2;
- WORD nOffset[2], nPlane;
- bool fCustomPal;
- char fAligned; // we are also using this for calculations, that's why it is char instead of bool...
- int tridx;
- RGBQUAD* orgpal /*[16]*/,* cuspal /*[4]*/;
- bool Alloc(int w, int h);
- void Free();
- BYTE GetNibble(BYTE* lpData);
- void DrawPixels(CPoint p, int length, int colorid);
- void TrimSubImage();
- public:
- int iLang, iIdx;
- bool fForced;
- __int64 start, delay;
- CRect rect;
- typedef struct {BYTE pal:4, tr:4;} SubPal;
- SubPal pal[4];
- RGBQUAD* lpPixels;
- CVobSubImage();
- virtual ~CVobSubImage();
- void Invalidate() {iLang = iIdx = -1;}
- void GetPacketInfo(BYTE* lpData, int packetsize, int datasize);
- bool Decode(BYTE* lpData, int packetsize, int datasize,
- bool fCustomPal,
- int tridx,
- RGBQUAD* orgpal /*[16]*/, RGBQUAD* cuspal /*[4]*/,
- bool fTrim);
- /////////
- private:
- COutlineList* GetOutlineList(CPoint& topleft);
- int GrabSegment(int start, COutline& o, COutline& ret);
- void SplitOutline(COutline& o, COutline& o1, COutline& o2);
- void AddSegment(COutline& o, CByteArray& pathTypes, CPointArray& pathPoints);
- public:
- bool Polygonize(CByteArray& pathTypes, CPointArray& pathPoints, bool fSmooth, int scale);
- bool Polygonize(CStringW& assstr, bool fSmooth = true, int scale = 3);
- void Scale2x();
- };