diff -r 59758314f811 -r d4524d6a4472 Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/png2eps_8c_source.html --- a/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/png2eps_8c_source.html Fri Jun 11 15:24:34 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,207 +0,0 @@ - - -
- -00001 /* -00002 * png2eps.c -00003 * Copyright (C) 2000-2002 A.J. van Os; Released under GPL -00004 * -00005 * Description: -00006 * Functions to translate png images into eps -00007 * -00008 */ -00009 -00010 #include <stdio.h> -00011 #include <ctype.h> -00012 #include "antiword.h" -00013 -00014 #if defined(DEBUG) -00015 static int iPicCounter = 0; -00016 #endif /* DEBUG */ -00017 -00018 -00019 /* -00020 * tSkipToData - skip until a IDAT chunk is found -00021 * -00022 * returns the length of the pixeldata or -1 in case of error -00023 */ -00024 static size_t -00025 tSkipToData(FILE *pFile, size_t tMaxBytes, size_t *ptSkipped) -00026 { -00027 ULONG ulName, ulTmp; -00028 size_t tDataLength, tToSkip; -00029 int iCounter; -00030 -00031 fail(pFile == NULL); -00032 fail(ptSkipped == NULL); -00033 -00034 /* Examine chunks */ -00035 while (*ptSkipped + 8 < tMaxBytes) { -00036 tDataLength = (size_t)ulNextLongBE(pFile); -00037 DBG_DEC(tDataLength); -00038 *ptSkipped += 4; -00039 -00040 ulName = 0x00; -00041 for (iCounter = 0; iCounter < 4; iCounter++) { -00042 ulTmp = (ULONG)iNextByte(pFile); -00043 if (!isalpha((int)ulTmp)) { -00044 DBG_HEX(ulTmp); -00045 return (size_t)-1; -00046 } -00047 ulName <<= 8; -00048 ulName |= ulTmp; -00049 } -00050 DBG_HEX(ulName); -00051 *ptSkipped += 4; -00052 -00053 if (ulName == PNG_CN_IEND) { -00054 break; -00055 } -00056 if (ulName == PNG_CN_IDAT) { -00057 return tDataLength; -00058 } -00059 -00060 tToSkip = tDataLength + 4; -00061 if (tToSkip >= tMaxBytes - *ptSkipped) { -00062 DBG_DEC(tToSkip); -00063 DBG_DEC(tMaxBytes - *ptSkipped); -00064 return (size_t)-1; -00065 } -00066 (void)tSkipBytes(pFile, tToSkip); -00067 *ptSkipped += tToSkip; -00068 } -00069 -00070 return (size_t)-1; -00071 } /* end of iSkipToData */ -00072 -00073 /* -00074 * iFindFirstPixelData - find the first pixeldata if a PNG image -00075 * -00076 * returns the length of the pixeldata or -1 in case of error -00077 */ -00078 static size_t -00079 tFindFirstPixelData(FILE *pFile, size_t tMaxBytes, size_t *ptSkipped) -00080 { -00081 fail(pFile == NULL); -00082 fail(tMaxBytes == 0); -00083 fail(ptSkipped == NULL); -00084 -00085 if (tMaxBytes < 8) { -00086 DBG_DEC(tMaxBytes); -00087 return (size_t)-1; -00088 } -00089 -00090 /* Skip over the PNG signature */ -00091 (void)tSkipBytes(pFile, 8); -00092 *ptSkipped = 8; -00093 -00094 return tSkipToData(pFile, tMaxBytes, ptSkipped); -00095 } /* end of iFindFirstPixelData */ -00096 -00097 /* -00098 * tFindNextPixelData - find the next pixeldata if a PNG image -00099 * -00100 * returns the length of the pixeldata or -1 in case of error -00101 */ -00102 static size_t -00103 tFindNextPixelData(FILE *pFile, size_t tMaxBytes, size_t *ptSkipped) -00104 { -00105 fail(pFile == NULL); -00106 fail(tMaxBytes == 0); -00107 fail(ptSkipped == NULL); -00108 -00109 if (tMaxBytes < 4) { -00110 DBG_DEC(tMaxBytes); -00111 return (size_t)-1; -00112 } -00113 -00114 /* Skip over the crc */ -00115 (void)tSkipBytes(pFile, 4); -00116 *ptSkipped = 4; -00117 -00118 return tSkipToData(pFile, tMaxBytes, ptSkipped); -00119 } /* end of tFindNextPixelData */ -00120 -00121 #if defined(DEBUG) -00122 /* -00123 * vCopy2File -00124 */ -00125 static void -00126 vCopy2File(FILE *pFile, ULONG ulFileOffset, size_t tPictureLen) -00127 { -00128 FILE *pOutFile; -00129 size_t tIndex; -00130 int iTmp; -00131 char szFilename[30]; -00132 -00133 if (!bSetDataOffset(pFile, ulFileOffset)) { -00134 return; -00135 } -00136 -00137 sprintf(szFilename, "/tmp/pic/pic%04d.png", ++iPicCounter); -00138 pOutFile = fopen(szFilename, "wb"); -00139 if (pOutFile == NULL) { -00140 return; -00141 } -00142 for (tIndex = 0; tIndex < tPictureLen; tIndex++) { -00143 iTmp = iNextByte(pFile); -00144 if (putc(iTmp, pOutFile) == EOF) { -00145 break; -00146 } -00147 } -00148 (void)fclose(pOutFile); -00149 } /* end of vCopy2File */ -00150 #endif /* DEBUG */ -00151 -00152 /* -00153 * bTranslatePNG - translate a PNG image -00154 * -00155 * This function translates an image from png to eps -00156 * -00157 * return TRUE when sucessful, otherwise FALSE -00158 */ -00159 BOOL -00160 bTranslatePNG(diagram_type *pDiag, FILE *pFile, -00161 ULONG ulFileOffset, size_t tPictureLen, const imagedata_type *pImg) -00162 { -00163 size_t tMaxBytes, tDataLength, tSkipped; -00164 -00165 #if defined(DEBUG) -00166 vCopy2File(pFile, ulFileOffset, tPictureLen); -00167 #endif /* DEBUG */ -00168 -00169 /* Seek to start position of PNG data */ -00170 if (!bSetDataOffset(pFile, ulFileOffset)) { -00171 return FALSE; -00172 } -00173 -00174 tMaxBytes = tPictureLen; -00175 tDataLength = tFindFirstPixelData(pFile, tMaxBytes, &tSkipped); -00176 if (tDataLength == (size_t)-1) { -00177 return FALSE; -00178 } -00179 -00180 vImagePrologue(pDiag, pImg); -00181 do { -00182 tMaxBytes -= tSkipped; -00183 vASCII85EncodeArray(pFile, pDiag->pOutFile, tDataLength); -00184 tMaxBytes -= tDataLength; -00185 tDataLength = tFindNextPixelData(pFile, tMaxBytes, &tSkipped); -00186 } while (tDataLength != (size_t)-1); -00187 vASCII85EncodeByte(pDiag->pOutFile, EOF); -00188 vImageEpilogue(pDiag); -00189 -00190 return TRUE; -00191 } /* end of bTranslatePNG */ -