📄 txt2tiff1.cpp
字号:
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 + -