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

📄 tiff.cpp

📁 将文本txt格式转换为tif图像格式的范例程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
								Lines[j].BitCount += 2;
							}
							else
							{
								if (Lines[j].CurrentBit)
								{
									tmpj = 1;
									Lines[j].CurrentBit = 0;
								}
								else
								{
									tmpj = 0;
									Lines[j].CurrentBit = 1;
								}
								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 = 2;
							}
							TestBit >>= 1;
						}
					}
					i = i + 2;
				}
				else if (TextBuffer[i] > 0x20 && TextBuffer[i] < 0x7f)
				{
					for (j = 0; j < 16; j ++)
					{
						TestBit = 0x80;
						for (l = 0; l < 8; l ++)
						{
							if (Lines[j].CurrentBit == ((ASCII[TextBuffer[i]][j] & TestBit) > 0))
							{
								Lines[j].BitCount += 2;
							}
							else
							{
								if (Lines[j].CurrentBit)
								{
									tmpj = 1;
									Lines[j].CurrentBit = 0;
								}
								else
								{
									tmpj = 0;
									Lines[j].CurrentBit = 1;
								}
								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 = 2;
							}
							TestBit >>= 1;
						}
					}
					i ++;
				}
				else
				{
					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 = 16;
						}
						else
						{
							Lines[j].BitCount += 16;
						}
					}
					i ++;
				}
			}
			if (i == 103)
			{
				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 = 16;
					}
					else
					{
						Lines[j].BitCount += 16;
					}
				}
			}
			for (j = 0; j < 16; j ++)
			{
				tmpj = Lines[j].CurrentBit;
				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;
				if (Lines[j].BitCursor > 4) Lines[j].ByteCursor ++;
				zipCode.Lint = NewLineCode.Code[0];
				zipCode.Lint = (zipCode.Lint << 4) + Lines[j].LineBuffer[Lines[j].ByteCursor];
				memcpy(&Lines[j].LineBuffer[Lines[j].ByteCursor], zipCode.Byte, 2);
				Lines[j].ByteCursor += 2;
				ByteCount += Lines[j].ByteCursor;
				fwrite(Lines[j].LineBuffer, 1, Lines[j].ByteCursor, TiffFile);

				if (resolution == HIGH_RESOLUTION)
				{
					ByteCount += Lines[j].ByteCursor;
					fwrite(Lines[j].LineBuffer, 1, Lines[j].ByteCursor, TiffFile);

				}
				Lines[j].BitCount = 64;
				Lines[j].CurrentBit = Lines[j].BitCursor = Lines[j].ByteCursor = 0;
			}
			for (j = 0; j < RowSpace; j ++)
			{
				fwrite(BlankLine, 4, 1, TiffFile);

				ByteCount += 4;
			}
		}
		else
		{
			if (LineNumber == 0) break;
			for (j = 0; j < (32 / resolution + RowSpace); j ++)
			{
				fwrite(BlankLine, 4, 1, TiffFile);

				ByteCount += 4;
			}
		}

		LineNumber ++;
		if (LineNumber == (ImageLength / (32 / resolution + RowSpace)))
		{
			PageNumber ++;
			LineNumber = 0;
			FileOffset = ftell(TiffFile);
			fseek(TiffFile, Ifd.IFDEntries[9].ValueOffset - 8, SEEK_SET);
			fwrite(&ByteCount, 4, 1, TiffFile);
			fwrite(&FileOffset, 4, 1, TiffFile);
			fseek(TiffFile, FileOffset, SEEK_SET);
		}
	}
	fseek(TiffFile, 8L, SEEK_SET);
	for (i = 0; i < PageNumber - 1; i ++)
	{
		fseek(TiffFile, 10 + 13 * sizeof(IFDENTRY), SEEK_CUR);
		fwrite(&i, 2, 1, TiffFile);
		fwrite(&PageNumber, 2, 1, TiffFile);
		fseek(TiffFile, 3 * sizeof(IFDENTRY), SEEK_CUR);
		fread(&FileOffset, 4, 1, TiffFile);
		fseek(TiffFile, FileOffset, SEEK_SET);
	}
	fseek(TiffFile, 10 + 13 * sizeof(IFDENTRY), SEEK_CUR);
	fwrite(&i, 2, 1, TiffFile);
	fwrite(&PageNumber, 2, 1, TiffFile);
	fseek(TiffFile, 3 * sizeof(IFDENTRY), SEEK_CUR);
	FileOffset = 0L;
	fwrite(&FileOffset, 4, 1, TiffFile);
	fclose(TiffFile);
	fclose(TextFile);
	fclose(FontFile);

	free(Ifd.IFDEntries);
	for (i = 0; i < 16; i ++) free(Lines[i].LineBuffer);
	return (0);
}

⌨️ 快捷键说明

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