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

📄 txt2tiff1.cpp

📁 把文本文件转化成TIF文件的函数基本上传真专用的
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	  break;
	}
  }
  if (imgBig) {
	for(j=0;j<64;j++) {
  		if(bit[j].nNumber == imgPoint2) {
			imgPoint = j;
			fill(g3buff);
			break;
		}
	}
  }
}


void fill(unsigned char *g3buff)
{
	struct TMP 	{
	unsigned char t1;  //Low bit
	unsigned char t0;  //Hight bit
	};
	union TT {
		TMP nTmp;
		unsigned int nInt;
	} Rec;
	char nLen;
  
	if (bw==0) 
	{
		Rec.nInt = bit[imgPoint].wDat;
		nLen = bit[imgPoint].wLen;
	} 
	else 
	{
		Rec.nInt = bit[imgPoint].bDat;
		nLen = bit[imgPoint].bLen;
	}

	if (nLen<=(8-g3Bit)) 
	{
		g3buff[g3Point] |= (Rec.nTmp.t0>>=g3Bit);
		g3Bit = g3Bit + nLen;
		if (g3Bit==8) 
		{
			g3Bit=0;
			g3Point++;
		}
	} 
	else if ((nLen>8-g3Bit) && (nLen<=16-g3Bit)) 
	{
		Rec.nInt>>=g3Bit;
		g3buff[g3Point]|=(Rec.nTmp.t0);
		g3buff[++g3Point]=(Rec.nTmp.t1);
		g3Bit=g3Bit+nLen-8;
		if (g3Bit==8) 
		{
			g3Bit=0;
			g3Point++;
		}
	} 
	else 
	{
		char cTmp=Rec.nTmp.t1;
		Rec.nInt>>=g3Bit;
		g3buff[g3Point]|=(Rec.nTmp.t0);
		g3buff[++g3Point]=(Rec.nTmp.t1);
		g3buff[++g3Point]=(cTmp<<=(8-g3Bit));
		g3Bit=g3Bit+nLen-16;
	}
}

void zoutch(int x, int y, unsigned char *ch, int zt)
{
	unsigned int qw;
	unsigned char by[MAXLENGTH*MAXLENGTH/8];
	int i1,i2;
	long int lengt;
	
	qw=(unsigned int)(((int)(ch[0]-0xa0))*100+(int)(ch[1]-0xa0));
	
	if(zt>0)
		lengt = (long)((qw-1)*(hzblk[zt].nLength*hzblk[zt].nLength/8L));
	else
		lengt=((qw/100)*94+qw%100-95L)*32L+4096;

	FILE * fp ;
	fp = fopen(hzblk[zt].HZK_FILE,"rb");
	if (fp == NULL) return;
	fseek(fp,lengt,SEEK_SET);
	fread(by,1,hzblk[zt].nLength*hzblk[zt].nLength/8L,fp);
	fclose(fp);

	for(i1=0;i1<hzblk[zt].nLength;i1++)
	  for(i2=0;i2<hzblk[zt].nLength/8;i2++)
		img_buff[i1][x/8+i2] = by[i1*hzblk[zt].nLength/8L+i2];
}

void zoutasc(int x, int y, unsigned char ch,int zt)
{
	unsigned char by[MAXLENGTH*MAXLENGTH/16];
	long location;
	short chsize;
	int i1,i2;

	chsize = hzblk[zt].nLength*hzblk[zt].nLength/16 ;
	location = (long)(ch*chsize);
	FILE * fp ;
	fp = fopen(hzblk[zt].HZK_FILE,"rb");
	if (fp == NULL)
		return;
	fseek(fp, location, SEEK_SET);
	fread(by, 1, chsize, fp);
	fclose(fp);
	
	for(i1=0;i1<hzblk[zt].nLength;i1++)
	  for(i2=0;i2<hzblk[zt].nLength/16;i2++)
		img_buff[i1][x/8+i2] = by[i1*hzblk[zt].nLength/16L+i2];
}



void zouttext(int x, int y, unsigned char *textstring,int zt)
{
	memset(img_buff, 0, MAXLENGTH*216);

	int l = strlen((char*)textstring);
	for(int i=0; i<l; )
	{
		if(textstring[i]&textstring[i+1]&0x80)
		{
			zoutch(x,y,textstring+i,zt);
			i += 2;
			x +=hzblk[zt].nLength;
		} else 
		{
			zoutasc(x,y,textstring[i],zt);
			i++;
			x +=(hzblk[zt].nLength/2);
		}
	}
}


// read a line from file hFile into buffer cTextLine 
void get_line(FILE *fp,unsigned char *cTextLine)
{
	int i=0;

	while( !feof(fp) )
	{
		cTextLine[i] = (unsigned char)fgetc(fp);
		if(cTextLine[i]=='\n') 
		{
			cTextLine[i] =0;
			break;
		}
		i++;
	}
	cTextLine[i] =0;
}


unsigned char ReverseByte(unsigned char c)
{
	unsigned char reversc = 0;
	int k = 0x01;
	int m = 0x80;
	for ( int i = 0 ; i < 8 ; i ++ )
	{
		if (c & m) reversc |= k;
		m >>= 1;
		k <<= 1;
	}
    return reversc;
}

int WriteG3Line(FILE *fp,unsigned char *cTextLine,int zt)
{
	int nlen;
	int nTotal = 0;
	

	zouttext(64, 0, cTextLine, zt);
	unsigned char cg3buff[1024];
	for(int i=0;i<hzblk[zt].nLength;i++)
	{
		memset(cg3buff,0,1024);
		nlen = Img2G3(img_buff[i],cg3buff);
        for(int j=0;j<nlen;j++) 
			cg3buff[j]=ReverseByte(cg3buff[j]);
		try
		{
			fwrite(cg3buff,nlen,1,fp);
		}
		catch(CFileException *e)
		{
			e->Delete();
		}
		nTotal += nlen;
	}
	return nTotal;
}


void WriteTiffHead(FILE *fp)
{
	unsigned char cHead[] = 
	{
		'I','I','*',0,0x18,0,0,0,
		0xCC,0,0,0,01,0,0,0,
		0xC4,0,0,0,01,0,0,0
	};
	try
	{
		fseek(fp, 0, SEEK_SET);
		fwrite(&cHead, sizeof(cHead), 1, fp);
	}
	catch(CFileException *e)
	{
		e->Delete();
	}
}

int GetLineNum(char *filename,int &number)
{
	FILE *fp;
	char buf;
	number=0;
	if( ( fp = fopen( filename,"rt" ) ) == NULL )
	{
		return 1;
	}

   while( ! feof( fp ) )
   {
		buf = (unsigned char)fgetc(fp);
		if (buf == '\n' )
		{
			number++;
		}
	}
	number++;
	fclose(fp);
	return 0;
}




//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11
// change txt file to TIFF format file
// return 1 if can't open text file
// return 2 if can't open tiff file
// return 0 if success
int CTxt2Tiff::Txt2Tiff(char *cTxtName,char *cBmpName, char *cTiffName)
{
	FILE *fp,*tp;
	LPBITMAPINFOHEADER lpbi;
	
	unsigned char cTextLine[128];
	int nElse[]={0xCC,1,0xC4,1};
	int nzt = DEFAULTZT;
	int nPageLines;
	int ret=0;

	ret=GetLineNum(cTxtName, nPageLines);
	if (ret==1)
	{
		return 2;
	}
	lpbi = (LPBITMAPINFOHEADER) GlobalAlloc(GHND ,sizeof(BITMAPINFOHEADER));
	if(lpbi == NULL)
		return -1;
	if(GetBmpInfo(cBmpName, lpbi)<0)
		return -1;
	
	if((fp=fopen(cTiffName,"wb"))==NULL)
	{
		return 2;
	}
		
	WriteTiffHead(fp);
	
	short nTotalPage = 1 ;
	short nPageNo = 0;
	WORD	nTagNum = TAGNUM;
	DWORD	nNextIFD = 0;
	int nHeadLen = 24;
	
	int nPageOffset = nHeadLen +
					  sizeof(nTagNum) + 
		              sizeof(TIFF_FIELD)*TAGNUM +
					  sizeof(nElse) +
					  sizeof(nNextIFD) ;
	
	long nLine = 0;
	int nLen = 0;
	long nHeight = 0;
	int nPageByteLen = 0;

	// 首先写标准的数据起始标志
	BYTE ff[2]={0x00,0x80};
	fseek(fp, nPageOffset, SEEK_SET);
	fwrite(&ff,sizeof(ff),1,fp);
	nPageByteLen += 2;

	Bmp2Img(cBmpName, (unsigned char *)img_buff);
	BYTE g3buff[1728/8];
	memset(g3buff, 0, 1728/8);
	while( nLine < lpbi->biHeight )
	{
		memset(g3buff, 0, 1728/8);
		nLen = Img2G3(img_buff[nLine], g3buff);
		for(int j=0; j<nLen; j++) 
			g3buff[j] = ReverseByte(g3buff[j]);
		fwrite(g3buff, nLen, 1, fp);
		nPageByteLen+=nLen;
		nLine++;
	}
	nHeight += lpbi->biHeight;
	nHeight += nPageLines*hzblk[nzt].nLength ;
	
	int nLineBytes = 0;
		
	if( (tp = fopen(cTxtName, "rt") ) == NULL)
	{
		fclose(fp);
		return 1;
	}
	while(!feof(tp))
	{
	
		memset(cTextLine, 0, sizeof(cTextLine));
		get_line(tp, cTextLine);
		
		nLineBytes = WriteG3Line(fp, cTextLine, nzt);
		nPageByteLen += nLineBytes;
		
	}
	fclose(tp);
	
	// prepare for write tiff tag
	nNextIFD = 0;
	tag[PageOffset_tag].offset   = nPageOffset;
	tag[PageByteLen_tag].offset  = nPageByteLen;
	tag[Height_tag].offset       = nHeight;
	tag[PageScanLine_tag].offset = nHeight;
	tag[PageNum_tag].offset      = (long)nPageNo + (long)(nTotalPage<< 16);

	// Seek the position where to write IFD
	fseek(fp,(long)0-(long)(nPageByteLen+
		                    sizeof(nElse)+
							sizeof(nNextIFD)+
							sizeof(TIFF_FIELD)*TAGNUM+
							sizeof(nTagNum)),SEEK_CUR);
	// Write TagNum
	fwrite(&nTagNum,sizeof(nTagNum),1,fp);
	// Write Tags
	fwrite(&tag, sizeof(TIFF_FIELD), TAGNUM ,fp);
	// Write Next IFD
	fwrite(&nNextIFD, sizeof(nNextIFD), 1, fp);
	// Write Else IFD
	fwrite(&nElse,sizeof(nElse), 1, fp);
	
	fclose(fp);
	GlobalFree(lpbi);
	return 0;
}

⌨️ 快捷键说明

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