xref: /plan9/sys/src/cmd/aux/antiword/imgtrans.c (revision f5736e95f14e1485b3a0291fa82d86cca323ab61)
1 /*
2  * imgtrans.c
3  * Copyright (C) 2000-2002 A.J. van Os; Released under GPL
4  *
5  * Description:
6  * Generic functions to translate Word images
7  */
8 
9 #include <stdio.h>
10 #include "antiword.h"
11 
12 
13 /*
14  * bTranslateImage - translate the image
15  *
16  * This function reads the type of the given image and and gets it translated.
17  *
18  * return TRUE when sucessful, otherwise FALSE
19  */
20 BOOL
bTranslateImage(diagram_type * pDiag,FILE * pFile,BOOL bMinimalInformation,ULONG ulFileOffsetImage,const imagedata_type * pImg)21 bTranslateImage(diagram_type *pDiag, FILE *pFile, BOOL bMinimalInformation,
22 	ULONG ulFileOffsetImage, const imagedata_type *pImg)
23 {
24 	options_type	tOptions;
25 
26 	DBG_MSG("bTranslateImage");
27 
28 	fail(pDiag == NULL);
29 	fail(pFile == NULL);
30 	fail(ulFileOffsetImage == FC_INVALID);
31 	fail(pImg == NULL);
32 	fail(pImg->iHorSizeScaled <= 0);
33 	fail(pImg->iVerSizeScaled <= 0);
34 
35 	vGetOptions(&tOptions);
36 	fail(tOptions.eImageLevel == level_no_images);
37 
38 	if (bMinimalInformation) {
39 		return bAddDummyImage(pDiag, pImg);
40 	}
41 
42 	switch (pImg->eImageType) {
43 	case imagetype_is_dib:
44 		return bTranslateDIB(pDiag, pFile,
45 				ulFileOffsetImage + pImg->tPosition,
46 				pImg);
47 	case imagetype_is_jpeg:
48 		return bTranslateJPEG(pDiag, pFile,
49 				ulFileOffsetImage + pImg->tPosition,
50 				pImg->tLength - pImg->tPosition,
51 				pImg);
52 	case imagetype_is_png:
53 		if (tOptions.eImageLevel == level_ps_2) {
54 			return bAddDummyImage(pDiag, pImg);
55 		}
56 		return bTranslatePNG(pDiag, pFile,
57 				ulFileOffsetImage + pImg->tPosition,
58 				pImg->tLength - pImg->tPosition,
59 				pImg);
60 	case imagetype_is_emf:
61 	case imagetype_is_wmf:
62 	case imagetype_is_pict:
63 	case imagetype_is_external:
64 		/* FIXME */
65 		return bAddDummyImage(pDiag, pImg);
66 	case imagetype_is_unknown:
67 	default:
68 		DBG_DEC(pImg->eImageType);
69 		return bAddDummyImage(pDiag, pImg);
70 	}
71 } /* end of bTranslateImage */
72