Initial revision
[rrdtool.git] / libraries / gd1.3 / gddemo.c
1 #include <stdio.h>
2 #include "gd.h"
3 #include "gdfontg.h"
4 #include "gdfonts.h"
5
6 int main(void)
7 {
8         /* Input and output files */
9         FILE *in;
10         FILE *out;
11
12         /* Input and output images */
13         gdImagePtr im_in, im_out;
14
15         /* Brush image */
16         gdImagePtr brush;
17
18         /* Color indexes */
19         int white;
20         int blue;
21         int red;
22         int green;
23
24         /* Points for polygon */
25         gdPoint points[3];
26
27         /* Create output image, 128 by 128 pixels. */
28         im_out = gdImageCreate(128, 128);
29
30         /* First color allocated is background. */
31         white = gdImageColorAllocate(im_out, 255, 255, 255);
32
33         /* Set transparent color. */
34         gdImageColorTransparent(im_out, white);
35
36         /* Try to load demoin.gif and paste part of it into the
37                 output image. */
38
39         in = fopen("demoin.gif", "rb");
40         if (!in) {
41                 fprintf(stderr, "Can't load source image; this demo\n");
42                 fprintf(stderr, "is much more impressive if demoin.gif\n");
43                 fprintf(stderr, "is available.\n");
44                 im_in = 0;
45         } else {
46                 im_in = gdImageCreateFromGif(in);
47                 fclose(in);
48                 /* Now copy, and magnify as we do so */
49                 gdImageCopyResized(im_out, im_in, 
50                         16, 16, 0, 0, 96, 96, 127, 127);                
51         }
52         red = gdImageColorAllocate(im_out, 255, 0, 0);
53         green = gdImageColorAllocate(im_out, 0, 255, 0);
54         blue = gdImageColorAllocate(im_out, 0, 0, 255);
55         /* Rectangle */
56         gdImageLine(im_out, 8, 8, 120, 8, green);       
57         gdImageLine(im_out, 120, 8, 120, 120, green);   
58         gdImageLine(im_out, 120, 120, 8, 120, green);   
59         gdImageLine(im_out, 8, 120, 8, 8, green);       
60         /* Circle */
61         gdImageArc(im_out, 64, 64, 30, 10, 0, 360, blue);
62         /* Arc */
63         gdImageArc(im_out, 64, 64, 20, 20, 45, 135, blue);
64         /* Flood fill */
65         gdImageFill(im_out, 4, 4, blue);
66         /* Polygon */
67         points[0].x = 32;
68         points[0].y = 0;
69         points[1].x = 0;
70         points[1].y = 64;       
71         points[2].x = 64;
72         points[2].y = 64;       
73         gdImageFilledPolygon(im_out, points, 3, green);
74         /* Brush. A fairly wild example also involving a line style! */
75         if (im_in) {
76                 int style[8];
77                 brush = gdImageCreate(8, 8);
78                 gdImageCopyResized(brush, im_in,
79                         0, 0, 0, 0, 
80                         gdImageSX(brush), gdImageSY(brush),
81                         gdImageSX(im_in), gdImageSY(im_in));
82                 gdImageSetBrush(im_out, brush); 
83                 /* With a style, so they won't overprint each other.
84                         Normally, they would, yielding a fat-brush effect. */
85                 style[0] = 0;
86                 style[1] = 0;
87                 style[2] = 0;
88                 style[3] = 0;
89                 style[4] = 0;
90                 style[5] = 0;
91                 style[6] = 0;
92                 style[7] = 1;
93                 gdImageSetStyle(im_out, style, 8);
94                 /* Draw the styled, brushed line */
95                 gdImageLine(im_out, 0, 127, 127, 0, gdStyledBrushed);
96         }
97         /* Text */
98         gdImageString(im_out, gdFontGiant, 16, 16, "hi", red);
99         gdImageStringUp(im_out, gdFontSmall, 32, 32, "hi", red);
100         /* Make output image interlaced (allows "fade in" in some viewers,
101                 and in the latest web browsers) */
102         gdImageInterlace(im_out, 1);
103         out = fopen("demoout.gif", "wb");
104         /* Write GIF */
105         gdImageGif(im_out, out);
106         fclose(out);
107         gdImageDestroy(im_out);
108         if (im_in) {
109                 gdImageDestroy(im_in);
110         }
111         return 0;
112 }
113