diff -r f345bda72bc4 -r 43e37759235e Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/png2eps_8c_source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/png2eps_8c_source.html Tue Mar 30 16:16:55 2010 +0100 @@ -0,0 +1,207 @@ + + + + +TB9.2 Example Applications: examples/PIPS/antiword/src/png2eps.c Source File + + + + + +

examples/PIPS/antiword/src/png2eps.c

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 */
+
+
Generated by  + +doxygen 1.6.2
+ +