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

📄 tiff.cpp

📁 将文本txt格式转换为tif图像格式的范例程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:

#include <windows.h>
#pragma hdrstop
#include <condefs.h>
//////////////////////////
#include <stdio.h>
//#include <stdlib.h>
//#include <string.h>
//#include <malloc.h>
#include "tiff.h"
#include "huffman.h"
///////////////////////////
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{
        return 1;
}
//---------------------------------------------------------------------------

/*unsigned char ASCII[256][16];
short int __stdcall Read_ASCII (void)
{
	FILE                   * fp;
	int                      i;

	fp = fopen("asc16", "rb");
	if (fp == NULL) return (1);
	for (i = 0; i < 256; i ++) fread(ASCII[i], 16, 1, fp);
	fclose(fp);
	return (0);
} */
short int WINAPI TextToTiff (const char* inputfile, const char* outputfile, unsigned short resolution)
{
	FILE                   * TextFile, * TiffFile, * fp;
	unsigned long            FileOffset = 0L;
	unsigned short           PageNumber = 0, LineNumber = 0;
	unsigned short           wbuffer[16];
	unsigned char            buffer[100];
        unsigned char            ASCII[256][16];
	FILE                   * FontFile;
	unsigned short           ImageLength, RowSpace = 3;
	unsigned long            ByteCount;
	unsigned short           TestBit;
	unsigned char            TextBuffer[108];
	unsigned short           i, j, l;
	unsigned short           tmpi, tmpj, tmpk;

        int k;
        
	LINESPEC                 Lines[16];
	ZIPCODE                  zipCode;

	TIFFHEADER               TiffHeader;
	IFD                      Ifd;

        fp = fopen("asc16", "rb");
	if (fp == NULL) return (1);
	for (k = 0; k < 256; k ++) fread(ASCII[k], 16, 1, fp);
	fclose(fp);
	//return (0);
	if (resolution == HIGH_RESOLUTION)
	{
		ImageLength = 2310;
		RowSpace = 3;
	}
	else if (resolution == STANDARD_RESOLUTION)
	{
		ImageLength = 1122;
		RowSpace = 1;
	}
	else return (6);

	if (!(TextFile = fopen(inputfile, "r"))) return (1);
	if (!(TiffFile = fopen(outputfile, "wb+"))) return (2);

	if (!(FontFile = fopen("hzk16", "rb"))) return (5);

	memset(&TiffHeader, 0, sizeof(TIFFHEADER));
	memset(&Ifd, 0, sizeof(IFD));
	TiffHeader.ByteOrder = II_ORDER;
	TiffHeader.TiffIdentify = TIFF_IDENTIFY;
	TiffHeader.IFDOffset = 8;
	Ifd.EntryCount = 17;
	Ifd.IFDEntries = (IFDENTRY *)malloc(17 * sizeof(IFDENTRY));
	if (Ifd.IFDEntries == NULL)
	{
		return (4);
	}
	for (i = 0; i < 16; i ++)
	{
		memset(&Lines[i], 0, sizeof(LINESPEC));
		Lines[i].BitCount = 64;
		Lines[i].LineBuffer = (unsigned char *)malloc(432);
		if (Lines[i].LineBuffer == NULL) return (4);
	}
	memset(Ifd.IFDEntries, 0, 17 * sizeof(IFDENTRY));

	fwrite(&TiffHeader, sizeof(TIFFHEADER), 1, TiffFile);
	Ifd.IFDEntries[0].Tag = NEW_SUBFILE_TYPE;
	Ifd.IFDEntries[0].Type = LONG_TYPE;
	Ifd.IFDEntries[0].Count = 1;
	Ifd.IFDEntries[0].ValueOffset = 2;
	Ifd.IFDEntries[1].Tag = IMAGE_WIDTH;
	Ifd.IFDEntries[1].Type = LONG_TYPE;
	Ifd.IFDEntries[1].Count = 1;
	Ifd.IFDEntries[1].ValueOffset = 1728;
	Ifd.IFDEntries[2].Tag = IMAGE_LENGTH;
	Ifd.IFDEntries[2].Type = LONG_TYPE;
	Ifd.IFDEntries[2].Count = 1;
	Ifd.IFDEntries[2].ValueOffset = ImageLength;
	Ifd.IFDEntries[3].Tag = BIT_SAMPLE;
	Ifd.IFDEntries[3].Type = SHORT_TYPE;
	Ifd.IFDEntries[3].Count = 1;
	Ifd.IFDEntries[3].ValueOffset = 1;
	Ifd.IFDEntries[4].Tag = COMPRESSION;
	Ifd.IFDEntries[4].Type = SHORT_TYPE;
	Ifd.IFDEntries[4].Count = 1;
	Ifd.IFDEntries[4].ValueOffset = 3;
	Ifd.IFDEntries[5].Tag = PHOTO_INTERPRET;
	Ifd.IFDEntries[5].Type = SHORT_TYPE;
	Ifd.IFDEntries[5].Count = 1;
	Ifd.IFDEntries[5].ValueOffset = 0;
	Ifd.IFDEntries[6].Tag = FILL_ORDER;
	Ifd.IFDEntries[6].Type = SHORT_TYPE;
	Ifd.IFDEntries[6].Count = 1;
	Ifd.IFDEntries[6].ValueOffset = 2;
	Ifd.IFDEntries[7].Tag = SAMPLE_PIXEL;
	Ifd.IFDEntries[7].Type = SHORT_TYPE;
	Ifd.IFDEntries[7].Count = 1;
	Ifd.IFDEntries[7].ValueOffset = 1;
	Ifd.IFDEntries[8].Tag = ROWS_STRIP;
	Ifd.IFDEntries[8].Type = LONG_TYPE;
	Ifd.IFDEntries[8].Count = 1;
	Ifd.IFDEntries[8].ValueOffset = ImageLength;
	Ifd.IFDEntries[9].Tag = X_RESOLUTION;
	Ifd.IFDEntries[9].Type = RATIONAL_TYPE;
	Ifd.IFDEntries[9].Count = 1;
	Ifd.IFDEntries[10].Tag = Y_RESOLUTION;
	Ifd.IFDEntries[10].Type = RATIONAL_TYPE;
	Ifd.IFDEntries[10].Count = 1;
	Ifd.IFDEntries[11].Tag = T4_OPTIONS;
	Ifd.IFDEntries[11].Type = LONG_TYPE;
	Ifd.IFDEntries[11].Count = 1;
	Ifd.IFDEntries[11].ValueOffset = 0;
	Ifd.IFDEntries[12].Tag = RESOLUTION_UNIT;
	Ifd.IFDEntries[12].Type = SHORT_TYPE;
	Ifd.IFDEntries[12].Count = 1;
	Ifd.IFDEntries[12].ValueOffset = 2;
	Ifd.IFDEntries[13].Tag = PAGE_NUMBER;
	Ifd.IFDEntries[13].Type = SHORT_TYPE;
	Ifd.IFDEntries[13].Count = 2;
	Ifd.IFDEntries[14].Tag = COPYRIGHT;
	Ifd.IFDEntries[14].Type = ASCII_TYPE;
	Ifd.IFDEntries[14].Count = 48;
	Ifd.IFDEntries[15].Tag = STRIP_OFFSETS;
	Ifd.IFDEntries[15].Type = LONG_TYPE;
	Ifd.IFDEntries[15].Count = 1;
	Ifd.IFDEntries[16].Tag = STRIP_BYTE_COUNTS;
	Ifd.IFDEntries[16].Type = LONG_TYPE;
	Ifd.IFDEntries[16].Count = 1;
	FileOffset = 8;

	while (1)
	{
		memset(TextBuffer, 0, 108);
		if (fgets((char *)TextBuffer, 105, TextFile))
		{
			for (j = 0; j < 16; j ++) memset(Lines[j].LineBuffer, 0, 432);
			if (LineNumber == 0)
			{
				Ifd.IFDEntries[9].ValueOffset = FileOffset + 6 + 17 * sizeof(IFDENTRY);
				Ifd.IFDEntries[10].ValueOffset = Ifd.IFDEntries[9].ValueOffset + 8;
				Ifd.IFDEntries[14].ValueOffset = Ifd.IFDEntries[10].ValueOffset + 8;
				Ifd.IFDEntries[15].ValueOffset = Ifd.IFDEntries[14].ValueOffset + 48;
				fwrite(&Ifd.EntryCount, 2, 1, TiffFile);
				fwrite(Ifd.IFDEntries, sizeof(IFDENTRY), 17, TiffFile);
				Ifd.NextIFD = 0;
				fwrite(&Ifd.NextIFD, 4, 1, TiffFile);
				memset(buffer, 0, 8);
				buffer[0] = 0xcc;
				buffer[4] = 0x01;
				fwrite(buffer, 8, 1, TiffFile);
				buffer[0] = 0xcc / resolution;
				fwrite(buffer, 8, 1, TiffFile);
				strcpy(buffer, "Copyright, WangJian, 1996. All rights reserved.");
				fwrite(buffer, 48, 1, TiffFile);
				buffer[0] = 0;
				buffer[1] = 0x80;
				fwrite(buffer, 2, 1, TiffFile);
				ByteCount = 2;
			}
                      	TextBuffer[strlen(TextBuffer)/* - 1*/] = 0;     /////////////
                     /* if (TextBuffer[strlen(TextBuffer) - 1] = '\n')
                                TextBuffer[strlen(TextBuffer) - 1] = 0;
                      else TextBuffer[strlen(TextBuffer) ] = 0;   */
			for (i = 0; i < 103; )
			{
				if (i >= strlen(TextBuffer))
				{
					i = (104 - strlen(TextBuffer)) * 16;
					for (j = 0; j < 16; j ++)
					{
						if (Lines[j].CurrentBit)
						{
							tmpj = 1;
							Lines[j].CurrentBit = 0;
							if (Lines[j].BitCount > 63)
							{
								tmpi = Lines[j].BitCount / 64 + 63;
								tmpk = Lines[j].BitCursor + HuffmanCode[tmpi].Length[tmpj];
								zipCode.Lint = HuffmanCode[tmpi].Code[tmpj];
								zipCode.Lint = (zipCode.Lint << Lines[j].BitCursor) + Lines[j].LineBuffer[Lines[j].ByteCursor];
								memcpy(&Lines[j].LineBuffer[Lines[j].ByteCursor], zipCode.Byte, 4);
								Lines[j].ByteCursor += tmpk / 8;
								Lines[j].BitCursor = tmpk % 8;
							}
							tmpi = Lines[j].BitCount % 64;
							tmpk = Lines[j].BitCursor + HuffmanCode[tmpi].Length[tmpj];
							zipCode.Lint = HuffmanCode[tmpi].Code[tmpj];
							zipCode.Lint = (zipCode.Lint << Lines[j].BitCursor) + Lines[j].LineBuffer[Lines[j].ByteCursor];
							memcpy(&Lines[j].LineBuffer[Lines[j].ByteCursor], zipCode.Byte, 4);
							Lines[j].ByteCursor += tmpk / 8;
							Lines[j].BitCursor = tmpk % 8;
							Lines[j].BitCount = i;
						}
						else
						{
							Lines[j].BitCount += i;
						}
					}
					i = 104;
					break;
				}
				if ((TextBuffer[i] > 0xa0) && ((i + 1) < strlen(TextBuffer)) &&
					(TextBuffer[i + 1] > 0xa0))
				{
					fseek(FontFile, ((long)(TextBuffer[i] - 0xa1u) * 94 + (long)TextBuffer[i + 1] - 0xa1u) * 32, SEEK_SET);
					fread(wbuffer, 16, 2, FontFile);
					for (j = 0; j < 16; j ++)
					{
						TestBit = 0x0080;
						for (l = 0; l < 16; l ++)
						{
							if (!TestBit) TestBit = 0x8000;
							if (Lines[j].CurrentBit == ((wbuffer[j] & TestBit) > 0))
							{

⌨️ 快捷键说明

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