⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tga.cpp

📁 电视字幕卡调用DLL模块
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		tt=i*para;
		for(j=0; j<para1; j++)
		{
			data[tt+j]=DataBuf[BufPoint];
			BufPoint++;
			if(BufPoint>=BUF_SIZE)
			{
				  _lread(handle, DataBuf, BUF_SIZE);
				  BufPoint=0;
			}
		}
	 }
	 i+=len;
	 if(i>(unsigned int)(xsize-1))
	 {
		*total=(short)i;
		break;
	 }
  } while(1==1);
  return;
}
void WriteLine(TGA_HEAD* head, void* data, void * tdata, char* matxbuf, short* xtable,
		short xsize, short protflag, short matxflag, short xdirection,
		short pixelflag, short visibleflag)
{
  short i, i1, xfirst, xlast, xinc, xinc1, xsize1;
  unsigned long *sdata32,   *tdata32;
  unsigned short *sdata16,  *tdata16;
  char flag;
  if(matxflag==YES)
  {
	 if(head->TgaXSize%8==0) xsize1=head->TgaXSize/8;
	 else                    xsize1=head->TgaXSize/8+1;
  }
  else xsize1=0;
  if(xdirection==_PX)
  {
	 xfirst=0;
	 xlast=xsize-1;
	 xinc=1;
  }
  else
  {
	 xfirst=xsize-1;
	 xlast=0;
	 xinc=-1;
  }
  i1=0;
  xinc1=1;
  if(pixelflag==_32BIT)
  {
	 sdata32=(unsigned long*)data;
	 tdata32=(unsigned long *)tdata;
	 i=xfirst;
	 if(matxflag==NO)
	 {
		do
		{
			if(protflag==ON)
			{
				if(visibleflag==YES)
				{
					//if((sdata32[xtable[i]]&0x00ffffffL)!=0)
						tdata32[i1]=sdata32[xtable[i]];//&0x00ffffffL;
				}
				else
				{
					if((sdata32[xtable[i]]&0x00ffffffL)!=0)
						tdata32[i1]=sdata32[xtable[i]];//|0xff000000L;
				}
			}
			else
			{
				if(visibleflag==YES)
				{
				//if((sdata32[xtable[i]]&0x00ffffffL)==0)
				//		tdata32[i1]=0x00000000L;
				//	else
						tdata32[i1]=sdata32[xtable[i]];//&0x00ffffffL;
				}
				else
				{
				
					/*
					if((sdata32[xtable[i]]&0x00ffffffL)==0)
						tdata32[i1]=0xff000000L;//10101
					else
					*/
						tdata32[i1]=sdata32[xtable[i]];//|0xff000000L;
				}
			}
		if(i==xlast) break;
			i+=xinc;
			i1+=xinc1;
	 }while(1==1);
  }
  else
  {
		do{
			 if(xdirection==_PX)
				flag=matxbuf[xtable[i]/8]&(0x80>>(xtable[i]%8));
			 else
					flag=matxbuf[xsize1-xtable[i]/8]&(0x1<<(8-xtable[i]%8));
			 if(flag!=0)
			 {
				 if(protflag==ON)
				 {
						if(visibleflag==YES)
						{
							if((sdata32[xtable[i]]&0x00ffffffL)!=0)
								tdata32[i1]=sdata32[xtable[i]];//&0x00ffffffL;
						}
						else
						{
							if((sdata32[xtable[i]]&0x00ffffffL)!=0)
								tdata32[i1]=sdata32[xtable[i]];//|0xff000000L;
						}
				}
				else
				{
					if(visibleflag==YES)
					{
						if((sdata32[xtable[i]]&0x00ffffffL)==0)
							tdata32[i1]=0x00000000L;
						else
							tdata32[i1]=sdata32[xtable[i]];//&0x00ffffffL;
					}
					else
					{
						if((sdata32[xtable[i]]&0x00ffffffL)==0)
								tdata32[i1]=0xff000000L;
						else
							tdata32[i1]=sdata32[xtable[i]];//|0xff000000L;
					}
				}
			 }
			 if(i==xlast) break;
			i+=xinc;
			i1+=xinc1;
		}while(1==1);
	 }
  }
  else
  {
	 sdata16=(unsigned short*)data;
	 tdata16=(unsigned short*)tdata;
	 i=xfirst;
	 if(matxflag==NO)
	 {
		do
		{
			if(protflag==ON)
			{
				if(visibleflag==YES)
				{
					if((sdata16[xtable[i]]&0x7fff)!=0)
					{
						if((sdata16[xtable[i]]&0x7c00)==0)
							tdata16[i1]=(sdata16[xtable[i]]&0x7fff)|0x0400;
						else tdata16[i1]=sdata16[xtable[i]]&0x7fff;
					}
			  }
			  else
			  {
					if((sdata16[xtable[i]]&0x7fff)!=0)
					{
					  if((sdata16[xtable[i]]&0x7c00)==0)
						 tdata16[i1]=sdata16[xtable[i]]|0x8400;
					  else tdata16[i1]=sdata16[xtable[i]]|0x8000;
					}
			  }
			}
			else
			{
			  if(visibleflag==YES)
			  {
				if((sdata16[xtable[i]]&0x7c00)==0)
				  tdata16[i1]=(sdata16[xtable[i]]&0x7fff)|0x0400;
				else  tdata16[i1]=sdata16[xtable[i]]&0x7fff;
			  }
			  else
			  {
				if((sdata16[xtable[i]]&0x7c00)==0)
				  tdata16[i1]=sdata16[xtable[i]]|0x8400;
				else
				  tdata16[i1]=sdata16[xtable[i]]|0x8000;
			  }
			}
			if(i==xlast) break;
			i+=xinc;
			i1+=xinc1;
		} while(1==1);
	 }
	 else
	 {
		do
		{
			if(xdirection==_PX)
					flag=matxbuf[xtable[i]/8]&(0x80>>(xtable[i]%8));
			else
					flag=matxbuf[xsize1-xtable[i]/8]&(0x1<<(8-xtable[i]%8));
			if(flag!=0)
			{
			  if(protflag==ON)
			  {
				if(visibleflag==YES)
				{
				  if((sdata16[xtable[i]]&0x7fff)!=0)
				  {
					 if((sdata16[xtable[i]]&0x7c00)==0)
						tdata16[i1]=(sdata16[xtable[i]]&0x7fff)|0x0400;
					 else
						tdata16[i1]=sdata16[xtable[i]]&0x7fff;
				  }
			  }
			  else
			  {
				  if((sdata16[xtable[i]]&0x7fff)!=0)
				  {
					 if((sdata16[xtable[i]]&0x7c00)==0)
						tdata16[i1]=sdata16[xtable[i]]|0x8400;
					 else
						tdata16[i1]=sdata16[xtable[i]]|0x8000;
				  }
			  }
		  }
		  else
		  {
			if(visibleflag==YES)
			{
			  if((sdata16[xtable[i]]&0x7c00)==0)
				 tdata16[i1]=(sdata16[xtable[i]]&0x7fff)|0x0400;
			  else
				 tdata16[i1]=sdata16[xtable[i]]&0x7fff;
			}
			else
			{
			  if((sdata16[xtable[i]]&0x7c00)==0)
				 tdata16[i1]=sdata16[xtable[i]]|0x8400;
			  else
				 tdata16[i1]=sdata16[xtable[i]]|0x8000;
			}
		  }
		}
		if(i==xlast) break;
		i+=xinc;
		i1+=xinc1;
		}while(1==1);
	 }
  }
  return;
}
void TransData24To16(void* data1, void* data, short size)
{
  unsigned long temp;
  int i;
  unsigned short* data16;
  char* data24;
  data24=(char*)data1;
  data16=(unsigned short*)data;
  for(i=0; i<size; i++)
  {
	 temp=0xff000000L|((unsigned long)data24[i*3])|
	 (((unsigned long)data24[i*3+1])<<8)|(((unsigned long)data24[i*3+2])<<16);
	 Trans32To16(&temp, &data16[i]);
  }
  return;
}

void TransData24To32(void* data1, void* data, short size)
{
  unsigned char* data24, t1,t2,t3;
  int i;
  unsigned long* data32;
  data24=(unsigned char*)data1;
  data32=(unsigned long*)data;
  for(i=0; i<size; i++)
  {
	 t1	= (unsigned char)data24[i*3];
	 t2	= (unsigned char)data24[i*3+1];
	 t3	= (unsigned char)data24[i*3+2];
	 data32[i]=( unsigned long )(0xff000000L |
				  ( (unsigned long )t1)|
				  ( ( (unsigned long ) t2)<<8)|
				  ( ( (unsigned long ) t3)<<16)
				  );
  }
  return;
}

void TransData32To16(void* data1, void* data, short size)
{
  unsigned long *data32;
  int i;
  unsigned short* data16;
  data32=(unsigned long*)data1;
  data16=(unsigned short*)data;
  for(i=0; i<size; i++) Trans32To16(&data32[i], &data16[i]);
  return;
}

void TransData16To32(void* data1, void* data, short size)
{
  unsigned long *data32;
  int i;
  unsigned short* data16;
  data32=(unsigned long*)data;
  data16=(unsigned short*)data1;
  for(i=0; i<size; i++) Trans16To32(&data16[i], &data32[i]);
  return;
}
void Trans16To32(unsigned short* color16, unsigned long* color32p)
{
  unsigned short color=*color16;
  unsigned long* color32=color32p;
  *color32=0;
  *color32|=((color&0x001f)<<3);
  *color32|=((color&0x03e0)<<6);
  *color32|=((color&0x7c00)<<9);
  if((color&0x8000)!=0) *color32|=0xff000000L;
  return;
}

void Trans32To16(unsigned long* color32, unsigned short* color16p)
{
  unsigned long color=*color32;
  unsigned short* color16=color16p;
  *color16=0;
  *color16|=(unsigned short)((color&0x000000ffL)>>3);
  *color16|=(unsigned short)(((color&0x0000ff00L)>>11)<<5);
  *color16|=(unsigned short)(((color&0x00ff0000L)>>19)<<10);
  if((color&0x80000000L)!=0) *color16|=0x8000;
  return;
}
void GetALLScrTable(short xsize, short ysize, short scrx, short scry,
		short* xtab, short* ytab )
{
  short i;
  double para, total;
  para=(double)xsize/(double)scrx;
  total=0;
  for(i=0; i<scrx; i++)
  {
	 xtab[i]=(short)total;
	 total+=para;
  }
  para=(double)ysize/(double)scry;
  total=0;
  for(i=0; i<scry; i++)
  {
	 ytab[i]=(short)total;
	 total+=para;
  }
  return;
}

LPVOID winalloc(long size)
{
	HGLOBAL hmem;
	hmem=GlobalAlloc(GHND,size);
	return GlobalLock(hmem);
};

void winfree(LPVOID ptr)
{
	HGLOBAL hmem=(HGLOBAL)GlobalHandle(ptr);
	GlobalUnlock(hmem);
	GlobalFree(hmem);
};
/* ******************************* add function by zjb ********************** */

unsigned int ReadTgaFileToBuffer( char* filename, unsigned int * over_buf, short & xsize, short & ysize )
{

  TGA_HEAD head;
  HFILE handle;
  long size;
  LPUSLONG ppp = (LPUSLONG)over_buf;
  
  handle=_lopen(filename, O_BINARY|O_RDONLY);
  if(handle==-1)
  {
	 _lclose(handle);
	 return(0);
  }
  _llseek(handle, 0, SEEK_SET);
  _lread(handle, (char*)&head, sizeof(TGA_HEAD));
  if(head.It!=2 && head.It!=10)
  {
	 _lclose(handle);
	 return(FORMAT_ERROR);
  }
  size=18L;
  if(head.Id>0) size+=(long)head.Id;
  if(head.Cmt==1) size+=(long)head.Cms2*((long)head.Cms3/8);
  xsize=head.TgaXSize;
  ysize=head.TgaYSize;

  ReadCelFIle(handle, &head, NULL, /*pp*/ppp, xsize, ysize,
	  xsize/*VIDEOWIDTH*/, NO, size, NO, _32BIT, NO);
  _lclose(handle);

  return(SUCCESS);
}

/*******************************  End of File  *******************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -