📄 txt2tiff1.cpp
字号:
// Txt2Tiff1.cpp: implementation of the CTxt2Tiff class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Txt2Tiff1.h"
#include <conio.h>
#include <time.h>
#include <io.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
#include "Txt2Tif.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CTxt2Tiff::CTxt2Tiff()
{
}
CTxt2Tiff::~CTxt2Tiff()
{
}
/* 序号,Black长度,Black编码字,White长度,White编码字 */
Hufm_BIT bit[CODELEN] = {
{0,10,3520,8,13568},
{1,3,16384,6,7168},
{2,2,49152,4,28672},
{3,2,32768,4,32768},
{4,3,24576,4,45056},
{5,4,12288,4,49152},
{6,4,8192,4,57344},
{7,5,6144,4,61440},
{8,6,5120,5,38912},
{9,6,4096,5,40960},
{10,7,2048,5,14336},
{11,7,2560,5,16384},
{12,7,3584,6,8192},
{13,8,1024,6,3072},
{14,8,1792,6,53248},
{15,9,3072,6,54272},
{16,10,1472,6,43008},
{17,10,1536,6,44032},
{18,10,512,7,19968},
{19,11,3296,7,6144},
{20,11,3328,7,4096},
{21,11,3456,7,11776},
{22,11,1760,7,1536},
{23,11,1280,7,2048},
{24,11,736,7,20480},
{25,11,768,7,22016},
{26,12,3232,7,9728},
{27,12,3248,7,18432},
{28,12,3264,7,12288},
{29,12,3280,8,512},
{30,12,1664,8,768},
{31,12,1680,8,6656},
{32,12,1696,8,6912},
{33,12,1712,8,4608},
{34,12,3360,8,4864},
{35,12,3376,8,5120},
{36,12,3392,8,5376},
{37,12,3408,8,5632},
{38,12,3424,8,5888},
{39,12,3440,8,10240},
{40,12,1728,8,10496},
{41,12,1744,8,10752},
{42,12,3488,8,11008},
{43,12,3504,8,11264},
{44,12,1344,8,11520},
{45,12,1360,8,1024},
{46,12,1376,8,1280},
{47,12,1392,8,2560},
{48,12,1600,8,2816},
{49,12,1616,8,20992},
{50,12,1312,8,21248},
{51,12,1328,8,21504},
{52,12,576,8,21760},
{53,12,880,8,9216},
{54,12,896,8,9472},
{55,12,624,8,22528},
{56,12,640,8,22784},
{57,12,1408,8,23040},
{58,12,1424,8,23296},
{59,12,688,8,18944},
{60,12,704,8,19200},
{61,12,1440,8,12800},
{62,12,1632,8,13056},
{63,12,1648,8,13312},
{64,10,960,5,55296},
{128,12,3200,5,36864},
{192,12,3216,6,23552},
{256,12,1456,7,28160},
{320,12,816,8,13824},
{384,12,832,8,14080},
{448,12,848,8,25600},
{512,13,864,8,25856},
{576,13,872,8,26624},
{640,13,592,8,26368},
{704,13,600,9,26112},
{768,13,608,9,26240},
{832,13,616,9,26880},
{896,13,912,9,27008},
{960,13,920,9,27136},
{1024,13,928,9,27264},
{1088,13,936,9,27392},
{1152,13,944,9,27520},
{1216,13,952,9,27648},
{1280,13,656,9,27776},
{1344,13,664,9,27904},
{1408,13,672,9,28032},
{1472,13,680,9,19456},
{1536,13,720,9,19584},
{1600,13,728,9,19712},
{1664,13,800,6,24576},
{1728,13,808,9,19840},
{2624,12,16,12,16},
{1792,11,256,11,256},
{1856,11,384,11,384},
{1920,11,416,11,416},
{1984,12,288,12,288},
{2048,12,304,12,304},
{2112,12,320,12,320},
{2176,12,336,12,336},
{2240,12,352,12,352},
{2304,12,368,12,368},
{2368,12,448,12,448},
{2432,12,464,12,464},
{2496,12,480,12,480},
{2560,12,496,12,496},
};
TIFF_FIELD tag[] = {
{ 254,4,1,2}, //FE 00 NewsubFileType 0
{ 256,4,1,1728 },//00 01 ImageWidth A4纸=1728 *1
{ 257,4,1,2291 },//01 01 ImageHeight A4纸=2291 *2
{ 258,3,1,1 }, //02 01 BitsPerSample 3
{ 259,3,1,3 }, //03 01 Compression 4
{ 262,3,1,0 }, //06 01 1 PhotoInterpret 16 black on white=0 white on black=1 5
{ 266,3,1,2 }, //0a 01 1 FillOrder 6
{ 273,4,1,0 }, //11 01 StripOffset page offset **7
{ 277,3,1,1 }, //15 01 SamplesPerPixel 8
{ 278,4,1,2291 },//16 01 RowsPerStrip page scan lines 1 *9
{ 279,4,1,0 }, //17 01 StripByteCounts bytes per page 2 **10
{ 282,5,1,8 }, //1a 01 XResolution **11
{ 283,5,1,16 }, //1b 01 YResolution **12
{ 292,4,1,4 }, //24 01 T4 Options 13
{ 296,3,1,2 }, //28 01 Resolution Unit 14
{ 297,3,2,1} //29 01 page number and number of pages 15
};
#define Width_tag 1 // TIFF_FIELD CTextToG3::tag[]数组序号
#define Height_tag 2
#define PageOffset_tag 7
#define PageScanLine_tag 9
#define PageByteLen_tag 10
#define XResolution_tag 11
#define YResolution_tag 12
#define PageNum_tag 15
//#define DEFAULTZT 2
#define DEFAULTZT 2
HZBLOCK hzblk[MAXNUMHZK] = {
{16,"hzk16"},
{32,"ht32.dot"},
{32,"kt32.dot"},
{32,"ls32.dot"},
{48,"ls48.dot"},
{64,"kt64.dot"},
{0,0}
};
int GetBmpInfo(char *BmpFile, LPBITMAPINFOHEADER lpbi)
{
BITMAPFILEHEADER bfHeader;
DWORD nSize = 0;
FILE *fp;
if((fp=fopen(BmpFile, "rb"))==NULL)
{
return -1;
}
nSize = fread(&bfHeader, 1, sizeof(BITMAPFILEHEADER), fp);
if(nSize==0 || nSize!=sizeof(BITMAPFILEHEADER) )
{
fclose(fp);
return -2;
}
if( bfHeader.bfType!=0x4d42)
{
fclose(fp);
return -3;
}
nSize = fread((void *)lpbi, 1, sizeof(BITMAPINFOHEADER), fp);
if(nSize!=sizeof(BITMAPINFOHEADER))
{
fclose(fp);
return -4;
}
// 只处理单色,单平面的非压缩BMP文件
if( lpbi->biBitCount != 0x01 || lpbi->biCompression!=0 || lpbi->biPlanes!=1 )
{
fclose(fp);
return -5;
}
fclose(fp);
return 0;
}
/* 把图象写在A4大小的img_buff上*/
int Bmp2Img(char *BmpFile, unsigned char *ImgBuf)
{
BITMAPFILEHEADER bfHeader;
BITMAPINFOHEADER bi;
FILE *fp;
DWORD nSize;
unsigned char *TmpBuf=NULL;
if((fp=fopen(BmpFile, "rb"))==NULL)
{
return -1;
}
nSize = fread(&bfHeader, 1, sizeof(BITMAPFILEHEADER), fp);
if(nSize==0 || nSize!=sizeof(BITMAPFILEHEADER) )
{
fclose(fp);
return -2;
}
if( bfHeader.bfType!=0x4d42)
{
fclose(fp);
return -3;
}
nSize = fread(&bi, 1, sizeof(BITMAPINFOHEADER), fp);
if(nSize!=sizeof(BITMAPINFOHEADER))
{
fclose(fp);
return -4;
}
// 只处理单色,单平面的非压缩BMP文件
if( bi.biBitCount != 0x01 || bi.biCompression!=0 || bi.biPlanes!=1 )
{
fclose(fp);
return -5;
}
if(fseek(fp, bfHeader.bfOffBits, SEEK_SET)!=0)
{
fclose(fp);
return -6;
}
TmpBuf = (unsigned char *)malloc(bi.biSizeImage);
memset(TmpBuf, 0, sizeof(bi.biSizeImage));
nSize = fread(TmpBuf, 1, (bi.biSizeImage), fp);
if(nSize!=(bfHeader.bfSize - bfHeader.bfOffBits))
{
fclose(fp);
free(TmpBuf);
return -7;
}
fclose(fp);
int nLineByte=bi.biSizeImage/bi.biHeight;
memset(img_buff, 0, sizeof(img_buff));
for(int i=0; i<bi.biHeight; i++)
{
for(int j=0; j<nLineByte; j++)
{
if((j+1)*8>bi.biWidth)
{
unsigned char tmpch;
tmpch=*(TmpBuf+(bi.biHeight-i-1)*nLineByte+j);
img_buff[i][j]=~(tmpch|0x0f);
break;
}
else
img_buff[i][j]=
~(*(TmpBuf+(bi.biHeight-i-1)*nLineByte+j));
}
}
free(TmpBuf);
return 0;
}
// function about hufm coder
unsigned int Img2G3(unsigned char *imgbuff,unsigned char *g3buff)
{
g3Point = 0;
imgPoint = 0;
g3Bit = 0;
if(imgbuff[0] & 0x80) {
g3Point++;
g3buff[0] =0x35;
bw=1;
} else bw=0;
for(int i=0;i<216;i++) {
for(int j=0;j<8;j++) {
if(imgbuff[i] & (0x80>>j)) { //black
if (bw==1) imgPoint++;
else {//white
GetSer(g3buff);
bw=1;
imgPoint=1;
}
} else {//white
if (bw==0) imgPoint++;
else {//black
GetSer(g3buff);
bw=0;
imgPoint=1;
}
}
}
}
GetSer(g3buff);
if(g3Bit>4) g3Point++;
g3Bit = 4;
imgPoint = 91;
fill(g3buff);
return (g3Point);
}
void GetSer(unsigned char *g3buff)
{
unsigned int imgPoint2 = 0;
unsigned int imgBig = 0;
if(imgPoint>63) {
imgPoint2 = imgPoint%64;
imgPoint -= imgPoint2;
imgBig = 1;
}
for(int j=0;j<104;j++) {
if(bit[j].nNumber == imgPoint) {
imgPoint = j;
fill(g3buff);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -