DCL 3.7.4
Loading...
Searching...
No Matches
ThumbNail.cpp File Reference
#include <stdio.h>
#include <gd.h>
#include <dcl/core/String.h>

Go to the source code of this file.

Macros

#define IMAGE_UNKNOWN   0
#define IMAGE_JPEG   1
#define IMAGE_GIF   2
#define IMAGE_PNG   3

Functions

__DCL_BEGIN_NAMESPACE bool GenThumbnailImage (const char *pszSrcFile, const char *pszContentType, const char *pszThumbnailFile, int nSize)

Macro Definition Documentation

◆ IMAGE_GIF

#define IMAGE_GIF   2

◆ IMAGE_JPEG

#define IMAGE_JPEG   1

◆ IMAGE_PNG

#define IMAGE_PNG   3

◆ IMAGE_UNKNOWN

#define IMAGE_UNKNOWN   0

Function Documentation

◆ GenThumbnailImage()

__DCL_BEGIN_NAMESPACE bool GenThumbnailImage ( const char * pszSrcFile,
const char * pszContentType,
const char * pszThumbnailFile,
int nSize )

Definition at line 15 of file ThumbNail.cpp.

21{
22 __DCL_ASSERT(pszSrcFile != NULL);
23 __DCL_ASSERT(pszContentType != NULL);
24 __DCL_ASSERT(pszThumbnailFile != NULL);
25
26 for( ; *pszContentType; pszContentType++) {
27 if (*pszContentType == '/')
28 {
29 pszContentType++;
30 break;
31 }
32 }
33
34#define IMAGE_UNKNOWN 0
35#define IMAGE_JPEG 1
36#define IMAGE_GIF 2
37#define IMAGE_PNG 3
38
39 int nSrcType = IMAGE_UNKNOWN;
40 if (String::compareNoCase(pszContentType, L"jpeg") == 0
41 || String::compareNoCase(pszContentType, L"pjpeg") == 0)
42 nSrcType = IMAGE_JPEG;
43 else if (String::compareNoCase(pszContentType, L"gif") == 0)
44 nSrcType = IMAGE_GIF;
45 else if (String::compareNoCase(pszContentType, L"png") == 0)
46 nSrcType = IMAGE_PNG;
47
48 if (nSrcType == IMAGE_UNKNOWN)
49 return false;
50
51 gdImagePtr inImage = NULL;
52 FILE* inFile = fopen(pszSrcFile, L"rb");
53 if (!inFile)
54 return false;
55
56 switch(nSrcType) {
57 case IMAGE_JPEG :
58 inImage = gdImageCreateFromJpeg(inFile);
59 break;
60 case IMAGE_GIF :
61 inImage = gdImageCreateFromGif(inFile);
62 break;
63 case IMAGE_PNG :
64 inImage = gdImageCreateFromPng(inFile);
65 break;
66 default :
67 __DCL_ASSERT(false);
68 }
69 fclose(inFile);
70
71 if (!inImage)
72 return false;
73
74 int nWidth;
75 int nHeight;
76 if (gdImageSX(inImage) > nSize || gdImageSY(inImage) > nSize) {
77 double fRate = 1.0;
78 if (gdImageSX(inImage) >= gdImageSY(inImage))
79 fRate = (double)nSize / (double)gdImageSX(inImage);
80 else
81 fRate = (double)nSize / (double)gdImageSY(inImage);
82
83 nWidth = (int)(((double)gdImageSX(inImage)) * fRate);
84 nHeight = (int)(((double)gdImageSY(inImage)) * fRate);
85 }
86 else {
87 nWidth = gdImageSX(inImage);
88 nHeight = gdImageSY(inImage);
89 }
90
91 gdImagePtr outImage = gdImageCreateTrueColor(nWidth, nHeight);
92 if (!outImage) {
93 gdImageDestroy(inImage);
94 return false;
95 }
96
97// gdImageCopyResized(
98 gdImageCopyResampled(
99 outImage, // dst
100 inImage, // src
101 0, // dstX
102 0, // dstY
103 0, // srcX
104 0, // srcY
105 nWidth, // dstW
106 nHeight, // dstH
107 gdImageSX(inImage), // srcW
108 gdImageSY(inImage) // srcH
109 );
110
111 FILE* outFile = fopen(pszThumbnailFile, L"wb");
112 if (!outFile) {
113 gdImageDestroy(inImage);
114 gdImageDestroy(outImage);
115 return false;
116 }
117 gdImageJpeg(outImage, outFile, -1);
118 fclose(outFile);
119
120 gdImageDestroy(inImage);
121 gdImageDestroy(outImage);
122
123 return true;
124}
#define NULL
Definition Config.h:312
#define __DCL_ASSERT(expr)
Definition Object.h:394
#define IMAGE_GIF
#define IMAGE_JPEG
#define IMAGE_PNG
#define IMAGE_UNKNOWN