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

📄 txt2tiff1.cpp

📁 把文本文件转化成TIF文件的函数基本上传真专用的
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -