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