|
|
/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
test.c
Abstract:
This file contains the main entrypooint for the TIFF library test program.
Environment:
WIN32 User Mode
Author:
Wesley Witt (wesw) 17-Feb-1996
--*/
#include "test.h"
#pragma hdrstop
BOOL TiffPreProcess( LPTSTR FileName, DWORD tiffCompression ) { BOOL NegotHiRes = TRUE; BOOL SrcHiRes = TRUE; WCHAR OutFileName[_MAX_FNAME]; HANDLE OutFileHandle; HANDLE SrcHandle; DWORD *lpdwOutputBuffer; //DWORD dwBytesWritten;
DWORD dwSizeOutputBuffer = 500000; DWORD dwUsedSizeOutputBuffer; DWORD MaxNeedOutSize; DWORD StripDataSize; DWORD RetCode = FALSE; TIFF_INFO TiffInfo; BOOL fOutFileNeedsBeClosed = 0; BOOL fOutBufferNeedsBeFreed = 0; DWORD CurrentOut = 0; DWORD FirstOut = 0; DWORD LastOut = 0; BOOL fTiffPageDone = FALSE; BOOL fTiffDocumentDone = FALSE; LPTSTR p;
lpdwOutputBuffer = (DWORD *) VirtualAlloc( NULL, dwSizeOutputBuffer, MEM_COMMIT, PAGE_READWRITE );
if (! lpdwOutputBuffer) { _tprintf( L"ERROR TIFF_TX: lpdwOutputBuffer can'r VirtualAlloc \n"); goto l_exit; }
fOutBufferNeedsBeFreed = 1;
_tprintf (L"TIFF_TX: NegotHiRes=%d SrcHiRes=%d Started at %ld \n", NegotHiRes, SrcHiRes, GetTickCount() );
SrcHandle = TiffOpen( FileName, &TiffInfo, TRUE, FILLORDER_LSB2MSB );
if (!SrcHandle) { goto l_exit; }
CurrentOut = 1;
//
// loop thru all pages
//
p = wcsrchr(FileName,'.'); *p = (TCHAR) 0; wsprintf( OutFileName, L"%snew.tif", FileName ); *p = '.';
if (!( OutFileHandle = TiffCreate(OutFileName, tiffCompression, 1728, FILLORDER_LSB2MSB, NegotHiRes) ) ) { _tprintf( L"TIFF_TX: ERROR: %lx CREATING file %s \n", GetLastError(), OutFileName); goto l_exit; }
fOutFileNeedsBeClosed = 1;
do {
fTiffPageDone = 0;
_tprintf( L"TIFF_TX: Page %d started at %ld\n", CurrentOut, GetTickCount() );
if (! TiffSeekToPage( (HANDLE) SrcHandle, CurrentOut, FILLORDER_LSB2MSB ) ) { _tprintf( L"ERROR: seeking to page \n"); goto l_exit; } else { _tprintf( L"TIFF_TX: Tiff seeking to page -OK time=%ld\n", GetTickCount() ); }
__try {
//
// check the current page dimensions. Add memory if needed.
//
TiffGetCurrentPageData( (HANDLE) SrcHandle, NULL, &StripDataSize, NULL, NULL );
if ( (StripDataSize < 0) || (StripDataSize > 1500000) ) { _tprintf( L"ERROR: Tiff CONVERTING %d page StripSize = %d \n", CurrentOut, StripDataSize); goto l_exit; }
if (tiffCompression == TIFF_COMPRESSION_MR) { MaxNeedOutSize = StripDataSize * 3 / 2; } else { MaxNeedOutSize = StripDataSize * 2; }
if (MaxNeedOutSize > dwSizeOutputBuffer) { if (MaxNeedOutSize > 1000000) { dwSizeOutputBuffer = 1500000; } else { dwSizeOutputBuffer = 1000000; }
VirtualFree(lpdwOutputBuffer, 0 , MEM_RELEASE);
lpdwOutputBuffer = (DWORD *) VirtualAlloc( NULL, dwSizeOutputBuffer, MEM_COMMIT, PAGE_READWRITE );
if (! lpdwOutputBuffer) { _tprintf( L"ERROR TIFF_TX: lpdwOutputBuffer can't VirtualAlloc %d \n", dwSizeOutputBuffer); goto l_exit; }
fOutBufferNeedsBeFreed = 1;
}
dwUsedSizeOutputBuffer = dwSizeOutputBuffer;
if (tiffCompression == TIFF_COMPRESSION_MR) { if (NegotHiRes == SrcHiRes) { if (! ConvMmrPageToMrSameRes ( (HANDLE) SrcHandle, lpdwOutputBuffer, &dwUsedSizeOutputBuffer, NegotHiRes) ) { _tprintf( L"ERROR: Tiff CONVERTING %d page \n", CurrentOut); goto l_exit; } } else { if (! ConvMmrPageHiResToMrLoRes ( (HANDLE) SrcHandle, lpdwOutputBuffer, &dwUsedSizeOutputBuffer) ) { _tprintf( L"ERROR: Tiff CONVERTING %d page \n", CurrentOut); goto l_exit; } } } else { if (! ConvMmrPageToMh ( (HANDLE) SrcHandle, lpdwOutputBuffer, &dwUsedSizeOutputBuffer, NegotHiRes, SrcHiRes) ) { _tprintf( L"ERROR: Tiff CONVERTING %d page \n", CurrentOut); goto l_exit; } }
} __except (EXCEPTION_EXECUTE_HANDLER) {
if (fOutBufferNeedsBeFreed) { VirtualFree(lpdwOutputBuffer, 0 , MEM_RELEASE); }
CloseHandle(OutFileHandle);
return (FALSE);
}
TiffStartPage( OutFileHandle ); if ( ! TiffWriteRaw( OutFileHandle, (LPBYTE) lpdwOutputBuffer, dwUsedSizeOutputBuffer) ) { _tprintf( L"ERROR: Tiff writing file %s \n", OutFileName); goto l_exit; }
TiffEndPage( OutFileHandle );
fTiffPageDone = 1;
_tprintf( L"TIFF_TX: Done page %d size=%d at %ld \n", CurrentOut, dwUsedSizeOutputBuffer, GetTickCount() );
if (!FirstOut) { FirstOut = 1; }
LastOut++;
//
// check to see if we are done
//
if (LastOut >= TiffInfo.PageCount) { _tprintf( L"TIFF_TX: Done whole document Last page %d size=%d at %ld \n", CurrentOut, dwUsedSizeOutputBuffer, GetTickCount() ); fTiffDocumentDone = 1;
goto good_exit; }
//
// we want to maintain 2 pages ahead
//
CurrentOut++; _tprintf( L"TIFF_TX: Start page %d at %ld \n", CurrentOut, GetTickCount() );
} while (1);
good_exit: if (SrcHandle) { TiffClose( (HANDLE) SrcHandle); }
RetCode = TRUE;
l_exit:
if (fOutFileNeedsBeClosed) { TiffClose( (HANDLE) OutFileHandle); }
if (fOutBufferNeedsBeFreed) { VirtualFree(lpdwOutputBuffer, 0 , MEM_RELEASE); } _tprintf( L"TIFF_TX: TiffConvertThread EXITs at %ld \n", GetTickCount() );
return (RetCode);
}
|